示例#1
0
    else:
        kbins = np.linspace(0, kub, knum)
    knames = node_k.discretize(klb, kub, knum, infinity='+', bins=kbins)

    # calculate and assign CPT
    # node a0
    a0cpt = node_a0.rv.cdf(node_a0.bins[1:]) - node_a0.rv.cdf(node_a0.bins[:-1])
    a0cpt = a0cpt[np.newaxis, :]
    node_a0.assign_cpt(a0cpt, statenames=a0names)
    # node m
    mcpt = node_m.rv.cdf(node_m.bins[1:]) - node_m.rv.cdf(node_m.bins[:-1])
    mcpt = mcpt[np.newaxis, :]
    node_m.assign_cpt(mcpt, statenames=mnames)
    # node k
    nstate = knum
    labels = itertools.product(np.arange(node_m.nstates()))
    labels = [label for label in labels]
    for i,label in enumerate(labels):
        truncrvs = []
        for j, pstate in enumerate(label):
            truncrvs.append(node_k.parents[j].truncate_rv(pstate,lmd=trunclmd))
        rvnames = ['M', 'C', 'Sre', 'Na']
        rvs = truncrvs+[rv_C, rv_Sre, rv_Na]
        # rvnames = ['M', 'C', 'Sre', 'Na']
        # rvs = [rv_m, rv_C, rv_Sre, rv_Na]
        probs = mc2k(rvnames, rvs, node_k.bins, G, nsmp)
        probs = probs/np.sum(probs,dtype=float)
        print 'labels: {}, progress: {}%, pmf: {}'.format(label,
            float(i)/len(labels)*100, np.array_str(probs,precision=3))
        node_k.assign_cpt(probs,label=np.asarray(label),statenames=node_k.statenames)
    # node ai
示例#2
0
        kbins = np.linspace(0, kub, knum)
    knames = node_k.discretize(klb, kub, knum, infinity='+', bins=kbins)

    # calculate and assign CPT
    # node a0
    a0cpt = node_a0.rv.cdf(node_a0.bins[1:]) - node_a0.rv.cdf(
        node_a0.bins[:-1])
    a0cpt = a0cpt[np.newaxis, :]
    node_a0.assign_cpt(a0cpt, statenames=a0names)
    # node m
    mcpt = node_m.rv.cdf(node_m.bins[1:]) - node_m.rv.cdf(node_m.bins[:-1])
    mcpt = mcpt[np.newaxis, :]
    node_m.assign_cpt(mcpt, statenames=mnames)
    # node k
    nstate = knum
    labels = itertools.product(np.arange(node_m.nstates()))
    labels = [label for label in labels]
    for i, label in enumerate(labels):
        truncrvs = []
        for j, pstate in enumerate(label):
            truncrvs.append(node_k.parents[j].truncate_rv(pstate,
                                                          lmd=trunclmd))
        rvnames = ['M', 'C', 'Sre', 'Na']
        rvs = truncrvs + [rv_C, rv_Sre, rv_Na]
        probs = mc2k(rvnames, rvs, node_k.bins, G, nsmp)
        probs = probs / np.sum(probs, dtype=float)
        print 'labels: {}, progress: {}%, pmf: {}'.format(
            label,
            float(i) / len(labels) * 100, np.array_str(probs, precision=3))
        node_k.assign_cpt(probs,
                          label=np.asarray(label),
示例#3
0
    r4bins = np.hstack((0, np.linspace(lb, ub, r4num-1)))
    r4names = r4.discretize(lb, ub, r4num, infinity='+', bins=r4bins)
    m4names = m4.discretize(lb, ub, m4num, infinity='+-', bins=r4bins)
    lb = 50.; ub = 250.
    r5bins = np.hstack((0, np.linspace(lb, ub, r5num-1)))
    r5names = r5.discretize(lb, ub, r5num, infinity='+', bins=r5bins)
    m5names = m5.discretize(lb, ub, m5num, infinity='+-', bins=r5bins)

    # calculate and assignCPT
    # node R5
    r5cpt = r5.rv.cdf(r5.bins[1:]) - r5.rv.cdf(r5.bins[:-1])
    r5cpt = r5cpt[np.newaxis,:]
    r5.assign_cpt(r5cpt, statenames=r5names)
    # node R4
    nstate = r4num
    labels = itertools.product(np.arange(r5.nstates()))
    mvnorm = stats.multivariate_normal(mean=None,cov=np.array([[1.,rolnR],[rolnR,1.]]))
    for i,label in enumerate(labels):
        probs=[]
        plb = r5.bins[label[0]]    #r5 lower bound
        pub = r5.bins[label[0]+1]    #r5 upper bound
        z5lb = (np.log(plb)-logmean)/logstd
        z5ub = (np.log(pub)-logmean)/logstd
        for k in xrange(nstate):
            clb = r4.bins[k]    #r4 lower bound
            cub = r4.bins[k+1]    #r4 upper bound
            z4lb = (np.log(clb)-logmean)/logstd
            z4ub = (np.log(cub)-logmean)/logstd
            low = np.array([z5lb, z4lb]); low[np.isneginf(low)] = -20.
            upp = np.array([z5ub, z4ub]); upp[np.isposinf(upp)] = 20.
            prob,info = stats.mvn.mvnun(low, upp, np.zeros(2), np.array([[1.,rolnR],[rolnR,1.]]))
示例#4
0
    # calculate and assignCPT
    # e0
    probs = np.array([[1., 0.]])
    e0.assign_cpt(probs, statenames=['safe', 'fail'])
    # node R5
    r5cpt = r5.rv.cdf(r5.bins[1:]) - r5.rv.cdf(r5.bins[:-1])
    r5cpt = r5cpt[np.newaxis,:]
    r5.assign_cpt(r5cpt, statenames=r5names)
    # node Uh
    uhcpt = uh.rv.cdf(uh.bins[1:]) - uh.rv.cdf(uh.bins[:-1])
    uhcpt = uhcpt[np.newaxis,:]
    uh.assign_cpt(uhcpt, statenames=uhnames)
    # node R4
    nstate = r4num
    labels = itertools.product(np.arange(r5.nstates()))
    mvnorm = stats.multivariate_normal(mean=None,cov=np.array([[1.,rolnR],[rolnR,1.]]))
    for i,label in enumerate(labels):
        probs=[]
        plb = r5.bins[label[0]]    #r5 lower bound
        pub = r5.bins[label[0]+1]    #r5 upper bound
        z5lb = (np.log(plb)-logmean)/logstd
        z5ub = (np.log(pub)-logmean)/logstd
        for k in xrange(nstate):
            clb = r4.bins[k]    #r4 lower bound
            cub = r4.bins[k+1]    #r4 upper bound
            z4lb = (np.log(clb)-logmean)/logstd
            z4ub = (np.log(cub)-logmean)/logstd
            low = np.array([z5lb, z4lb]); low[np.isneginf(low)] = -20.
            upp = np.array([z5ub, z4ub]); upp[np.isposinf(upp)] = 20.
            prob,info = stats.mvn.mvnun(low, upp, np.zeros(2), np.array([[1.,rolnR],[rolnR,1.]]))
示例#5
0
# decision making
# type 1
dbnet.enter_finding(forecast, 0)
utils = dbnet.get_node_expectedutils(umbrella)
print 'If the forecast is sunny, expected utility of {} is {}, of {} is {}\n'.format(
        umbrella.statenames[0], utils[0],
        umbrella.statenames[1], utils[1])

dbnet.retract_netfindings()
dbnet.enter_finding(forecast, 1)
utils = dbnet.get_node_expectedutils(umbrella)
print 'If the forecast is cloudy, expected utility of {} is {}, of {} is {}\n'.format(
        umbrella.statenames[0], utils[0],
        umbrella.statenames[1], utils[1])

dbnet.retract_netfindings()
dbnet.enter_finding(forecast, 2)
utils = dbnet.get_node_expectedutils(umbrella)
print 'If the forecast is rainy, expected utility of {} is {}, of {} is {}\n'.format(
        umbrella.statenames[0], utils[0],
        umbrella.statenames[1], utils[1])

#type 2
dbnet.retract_netfindings()
dummy = dbnet.get_node_expectedutils(umbrella)
for fs in range(forecast.nstates()):
    decision = dbnet.get_node_funcstate(umbrella, [fs])
    print 'If the forecast is {}, the best decision is {}.\n'.format(
            forecast.statenames[fs], umbrella.statenames[decision])
示例#6
0
    # calculate and assignCPT
    # e0
    probs = np.array([[1., 0.]])
    e0.assign_cpt(probs, statenames=['safe', 'fail'])
    # node R5
    r5cpt = r5.rv.cdf(r5.bins[1:]) - r5.rv.cdf(r5.bins[:-1])
    r5cpt = r5cpt[np.newaxis, :]
    r5.assign_cpt(r5cpt, statenames=r5names)
    # node Uh
    uhcpt = uh.rv.cdf(uh.bins[1:]) - uh.rv.cdf(uh.bins[:-1])
    uhcpt = uhcpt[np.newaxis, :]
    uh.assign_cpt(uhcpt, statenames=uhnames)
    # node R4
    nstate = r4num
    labels = itertools.product(np.arange(r5.nstates()))
    mvnorm = stats.multivariate_normal(mean=None,
                                       cov=np.array([[1., rolnR], [rolnR,
                                                                   1.]]))
    for i, label in enumerate(labels):
        probs = []
        plb = r5.bins[label[0]]  #r5 lower bound
        pub = r5.bins[label[0] + 1]  #r5 upper bound
        z5lb = (np.log(plb) - logmean) / logstd
        z5ub = (np.log(pub) - logmean) / logstd
        for k in xrange(nstate):
            clb = r4.bins[k]  #r4 lower bound
            cub = r4.bins[k + 1]  #r4 upper bound
            z4lb = (np.log(clb) - logmean) / logstd
            z4ub = (np.log(cub) - logmean) / logstd
            low = np.array([z5lb, z4lb])
示例#7
0
x2num = 5
m = x1.rv.stats('m'); s = np.sqrt(x1.rv.stats('v'))
#lb = np.maximum(0, m-2*s); ub = m+2*s
lb = 0.; ub = m+1.5*s
x1names = x1.discretize(lb, ub, x1num, infinity='+')
x2names = x2.discretize(lb*10., ub*10., x2num, infinity='+')

# calculate and assign CPT
# node X1
x1cpt = x1.rv.cdf(x1.bins[1:]) - x1.rv.cdf(x1.bins[:-1])
x1cpt = x1cpt[np.newaxis,:]
x1.assign_cpt(x1cpt, statenames=x1names)
# node X2
lmd = 0.05
nstate = x2num
labels = itertools.product(np.arange(x1.nstates()))
for i, label in enumerate(labels):
    rvs = []
    probs=[]
    for j, pstate in enumerate(label):
        rvs.append(x2.parents[j].truncate_rv(pstate))
    for k in xrange(nstate):
        probs.append(rvs[0].cdf(x2.bins[k+1]/10.) -
                rvs[0].cdf(x2.bins[k]/10.))
    probs = np.asarray(probs)
    x2.assign_cpt(probs,label=np.asarray(label),statenames=x2names)
# node Y
nstate = 2
labels = itertools.product(np.arange(x2.nstates()))
rvnames = [x2.name, 'X3']
corr = np.eye(nstate)
示例#8
0
    r4names = r4.discretize(lb, ub, r4num, infinity='+', bins=r4bins)
    m4names = m4.discretize(lb, ub, m4num, infinity='+-', bins=r4bins)
    lb = 50.
    ub = 250.
    r5bins = np.hstack((0, np.linspace(lb, ub, r5num - 1)))
    r5names = r5.discretize(lb, ub, r5num, infinity='+', bins=r5bins)
    m5names = m5.discretize(lb, ub, m5num, infinity='+-', bins=r5bins)

    # calculate and assignCPT
    # node R5
    r5cpt = r5.rv.cdf(r5.bins[1:]) - r5.rv.cdf(r5.bins[:-1])
    r5cpt = r5cpt[np.newaxis, :]
    r5.assign_cpt(r5cpt, statenames=r5names)
    # node R4
    nstate = r4num
    labels = itertools.product(np.arange(r5.nstates()))
    mvnorm = stats.multivariate_normal(mean=None,
                                       cov=np.array([[1., rolnR], [rolnR,
                                                                   1.]]))
    for i, label in enumerate(labels):
        probs = []
        plb = r5.bins[label[0]]  #r5 lower bound
        pub = r5.bins[label[0] + 1]  #r5 upper bound
        z5lb = (np.log(plb) - logmean) / logstd
        z5ub = (np.log(pub) - logmean) / logstd
        for k in xrange(nstate):
            clb = r4.bins[k]  #r4 lower bound
            cub = r4.bins[k + 1]  #r4 upper bound
            z4lb = (np.log(clb) - logmean) / logstd
            z4ub = (np.log(cub) - logmean) / logstd
            low = np.array([z5lb, z4lb])
示例#9
0
dbnet.set_autoupdate()
# save the network
dbnet.save_net("BNdecision.dne")

# decision making
# type 1
dbnet.enter_finding(forecast, 0)
utils = dbnet.get_node_expectedutils(umbrella)
print 'If the forecast is sunny, expected utility of {} is {}, of {} is {}\n'.format(
    umbrella.statenames[0], utils[0], umbrella.statenames[1], utils[1])

dbnet.retract_netfindings()
dbnet.enter_finding(forecast, 1)
utils = dbnet.get_node_expectedutils(umbrella)
print 'If the forecast is cloudy, expected utility of {} is {}, of {} is {}\n'.format(
    umbrella.statenames[0], utils[0], umbrella.statenames[1], utils[1])

dbnet.retract_netfindings()
dbnet.enter_finding(forecast, 2)
utils = dbnet.get_node_expectedutils(umbrella)
print 'If the forecast is rainy, expected utility of {} is {}, of {} is {}\n'.format(
    umbrella.statenames[0], utils[0], umbrella.statenames[1], utils[1])

#type 2
dbnet.retract_netfindings()
dummy = dbnet.get_node_expectedutils(umbrella)
for fs in range(forecast.nstates()):
    decision = dbnet.get_node_funcstate(umbrella, [fs])
    print 'If the forecast is {}, the best decision is {}.\n'.format(
        forecast.statenames[fs], umbrella.statenames[decision])