config.param_UAV_charging_power_consumption_rate = charging_rate
											config.param_UAV_base_distance = base_distance
											config.param_UAV_power_capacity = UAV_power_capacity
											network_type_str = str(num) + '_' + str(size) + '_' + str(size) \
												+ '_' + str(net_type) + '_' + str(localization_time) \
												+ '_' + str(transfer_rate) + '_' + str(task_threshold) \
												+ '_' + str(hovering_rate) + '_' + str(charging_rate) \
												+ '_' + str(base_distance) + '_' + str(UAV_power_capacity)
											print 'Network Type: ' + network_type_str							
											UAV_new, nodes_new = object_manager_.create_objects(config)

											# single flight
											if is_single_flight == True:
												# lower bound
												nodes = copy.deepcopy(nodes_new)
												lower_bound = UAV_AI.compute_lifetime_lower_bound(nodes)
												print 'Lifetime lower Bound', lower_bound
												res_file.write(network_type_str + ',' + 'lower_bound' + ',' + str(lower_bound) + '\n')	

												# start the experiment
												for charge_mode in param_charge_mode:
													for path_mode in param_path_mode:
														# filter invalid combination
														if is_valid_combination(charge_mode, path_mode) == False:
															continue
														UAV_mode = path_mode + '_' + charge_mode
														print 'UAV Mode: ' + UAV_mode
														UAV = copy.deepcopy(UAV_new)
														nodes = copy.deepcopy(nodes_new)
														# a hack for combination experiment
														# for node in nodes: