aiub, aiedges, node_repair=rarray[-1], asmp0=asmp0) aarray.append(node_ai) elif inspyear[ia]: # node ai node_ai = create_node_a("A" + str(ia + 1), [aarray[-1], node_k, node_m], ainum, ailb, aiub, aiedges) # node inspection node_insp = Node("Inspection" + str(ia + 1), parents=None, rvname='discrete') node_insp.set_node_kind(DECISION_NODE) node_insp.set_node_state_name(['no', 'insp1', 'insp2', 'insp3']) # node mi node_mi = create_node_mi("M" + str(ia + 1), [node_insp, node_ai], minum, ailb, aiub, aiedges) # node ui node_ui = Node("Util_Insp" + str(ia + 1), parents=[node_insp], rvname='deterministic') node_ui.set_node_kind(UTILITY_NODE) node_ui.assign_func(inspection_utility) # node repair node_repair = Node("Repair" + str(ia + 1), parents=[node_insp], rvname='discrete') node_repair.set_node_kind(DECISION_NODE) node_repair.set_node_state_name(['no', 'repair'])
aiedges = np.hstack((aiedges,acrit+1e-3)) if ia == 0: node_ai = create_node_a("A"+str(ia+1), [aarray[-1], node_k, node_m], ainum, ailb, aiub, aiedges) aarray.append(node_ai) elif inspyear[ia-1]: asmp0 = rv_a0.rvs(size=int(nsmp)) node_ai = create_node_a("A"+str(ia+1), [aarray[-1], node_k, node_m], ainum, ailb, aiub, aiedges, node_repair=rarray[-1], asmp0=asmp0) aarray.append(node_ai) elif inspyear[ia]: # node ai node_ai = create_node_a("A"+str(ia+1), [aarray[-1], node_k, node_m], ainum, ailb, aiub, aiedges) # node inspection node_insp = Node("Inspection"+str(ia+1), parents=None, rvname='discrete') node_insp.set_node_kind(DECISION_NODE) node_insp.set_node_state_name(['no', 'insp1', 'insp2', 'insp3']) # node mi node_mi = create_node_mi("M"+str(ia+1), [node_insp, node_ai], minum, ailb, aiub, aiedges) # node ui node_ui = Node("Util_Insp"+str(ia+1), parents=[node_insp], rvname='deterministic') node_ui.set_node_kind(UTILITY_NODE) node_ui.assign_func(inspection_utility) # node repair node_repair = Node("Repair"+str(ia+1), parents=[node_insp], rvname='discrete') node_repair.set_node_kind(DECISION_NODE) node_repair.set_node_state_name(['no', 'repair']) # node ur node_ur = Node("Util_Repair"+str(ia+1), parents=[node_repair, node_ai], rvname='deterministic') node_ur.set_node_kind(UTILITY_NODE) def repair_utility(pstate, node_ai=node_ai): repairstate, aistate = pstate
weather = Node("Weather", parents=None, rvname='discrete') forecast = Node("Forecast", parents=[weather], rvname='discrete') umbrella = Node("Umbrella", parents=[forecast], rvname='discrete') satisfy = Node("Satisfaction", parents=[weather, umbrella], rvname='deterministic') umbrella.set_node_kind(DECISION_NODE) satisfy.set_node_kind(UTILITY_NODE) # assign CPT # node weather weathercpt = np.array([[0.7, 0.3]]) weather.assign_cpt(weathercpt, statenames=['sunshine', 'rain']) # node forecast forecastcpt = np.array([[0.7, 0.2, 0.1], [0.15, 0.25, 0.6]]) forecast.assign_cpt(forecastcpt, statenames=['sunny', 'cloudy', 'rainy']) # node umbrella umbrella.set_node_state_name(['take_umbrella', 'dont_take_umbrella']) # node satisfy def calculate_util(pstate): forecaststate,umbrellastate = pstate if forecaststate==0 and umbrellastate==0: return 20. elif forecaststate==0 and umbrellastate==1: return 100. elif forecaststate==1 and umbrellastate==0: return 70. elif forecaststate==1 and umbrellastate==1: return 0. satisfy.assign_func(calculate_util) # create new network dbnet = Network("BNexample1")
umbrella = Node("Umbrella", parents=[forecast], rvname='discrete') satisfy = Node("Satisfaction", parents=[weather, umbrella], rvname='deterministic') umbrella.set_node_kind(DECISION_NODE) satisfy.set_node_kind(UTILITY_NODE) # assign CPT # node weather weathercpt = np.array([[0.7, 0.3]]) weather.assign_cpt(weathercpt, statenames=['sunshine', 'rain']) # node forecast forecastcpt = np.array([[0.7, 0.2, 0.1], [0.15, 0.25, 0.6]]) forecast.assign_cpt(forecastcpt, statenames=['sunny', 'cloudy', 'rainy']) # node umbrella umbrella.set_node_state_name(['take_umbrella', 'dont_take_umbrella']) # node satisfy def calculate_util(pstate): forecaststate, umbrellastate = pstate if forecaststate == 0 and umbrellastate == 0: return 20. elif forecaststate == 0 and umbrellastate == 1: return 100. elif forecaststate == 1 and umbrellastate == 0: return 70. elif forecaststate == 1 and umbrellastate == 1: return 0.