Coder Social home page Coder Social logo

fuzzybn's Introduction

FBN

1. 程序介绍

此程序针对港口韧性系统风险因子分析,建立的一个灵活可变的模糊贝叶斯网络结构。通过每个输入结点的无条件概率得到最终的Crisp value或效用函数值。网络结构通过配置文件的方式修改,程序内部对不同的网络结构参数自适应。

2. 使用说明

2.1 配置文件加载

此程序所有需要用到的数据以及配置文件存放在Data文件夹中,主要有三个文件组成:

  • NetShape.ini : 此文件为配置文件,用于修改网络结构以及每个结点语言描述等级的个数。有如下几个变量
    • Linguistic_Terms: 语言描述等级的个数
    • Layer_num: 网络层数(除去输入结点)
    • Layer_Node_x: 第x层结点的父节点个数(中间用Tab分割,输出层为第一层)
  • InputData.CSV: 输入结点的每个语言描述等级的概率,同一节点的概率和为1
  • Normalised_Weights.CSV: 每个节点对其子节点影响的权重(由FAHP得到,一个节点的所有父节点对其的影响权重的和为1)
2.2 使用

执行FBN_main.py函数,则会输出相应的目标节点的概率,效用函数值以及进行敏感性分析后,每个节点调整不同比例的效用函数值

3. 程序说明

3.1程序文件说明:

此程序主要包括四个文件(夹):

  • Data:用于存放配置文件以及输入和参数
  • FBN_main.py: 程序主函数文件(执行文件)
  • Init.py: 存放了读取文件或加载文件的子函数
  • Lib.py: 存放所有与计算或处理有关的子函数
3.2 部分子函数说明:
  • class Node: 定义输入节点类, 其有一个属性为输入结点的概率prob, 初始化时需对其概率赋值,否则概率为空
  • class CalNode(Node): 定义了中间节点以及输出结点,是Node的子类, 比Node类多了两个属性分别为cpt(该结点与其父节点构成的条件概率表), joint(该节点的父节点所有可能的概率乘积)
  • load_input: 将从文件读取到的输入概率赋值给网络的输入结点
  • cal_cpt: 计算条件概率表: 根据symmetric model方法以及FAHP的到的权重计算条件概率表。 $$P(Z|Y_1, Y_2, ..., Y_n) = \Sigma_{r=1}^nw_r $$ 对于一个有y个父节点的节点,若其与其父节点描述等级为N个级别,则他的条件概率表一共有$N^{y+1}$个参数。例如R1有5个父节点,每个结点有5个等级的描述级别,则其cpt共有$5^6$个参数,为了方便运算和查询,用一个5x5x5x5x5x5的6维矩阵存储,则查询是其矩阵下标及为对应的条件概率。
  • cal_joint_prob: 计算结点的父节点所有可能的概率乘积组合(针对输入结点的下一层结点)。 如:结点$X_1, X_2$分别有两种状态,则可能的概率乘积组合为4中 $$ P(X_1=1)P(X_2=1), P(X_1=0)P(X_2=1),P(X_1=1)P(X_2=0),P(X_1=0)P(X_2=0)$$ 若某个结点有5个父节点, 并且有5个语言等级描述,则此函数的输出应为5x5x5x5x5的矩阵
3.3 程序流程

主程序的执行流程为:

  1. 从文件中读取语言描述等级的个数,网络层数,每层结点个数,权重以及输入等信息
  2. 创建一个空数组用于存储节点, 根据读取的网络结构分层次向此空数组中添加结点, 构成网络模型,输入层节点为Node类, 中间层以及输出层为CalNode类
  3. 根据读取的权重计算除输入层结点外每个结点相应的条件概率表cpt
  4. 将读取到的输入概率加载到输入层的节点中
  5. 计算输入结点下一层的joint(即调用cal_joint_prob)
  6. 计算该结点的概率(贝叶斯网络图中用联合概率表示各节点之间的依赖关系) 即利用公式 $$P(A,B,C) = P(A|B,C)P(B)P(C)$$ 只需将条件概率表对应的条件概率矩阵与cal_joint_prob得到的概率矩阵相乘再求和,得到的值即为节点在该状态下的概率
  7. 将此层计算的结果作为下一层的输入再计算,直到得到最终结果

fuzzybn's People

Contributors

cocoahz avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.