关于图中节点间的概率求解问题

(本文年代久远,请谨慎阅读)前提:节点是含有若干特征(小节点)的大节点,大节点间连接实际为特征间的连接

在一个网络图中,若干节点之间的概率问题有以下几种:

设现有A,B,C等若干大节点,其内特征为ai,bj,ck;

P(A); //数出A节点发散的所有边的数量除以图中出现的总边数

P(AB); //即P(A)*P(B),原理同上

P(A,B); //此为联合概率,如果AB之间不相联系,则直接为零

P(A | B); //AB间相关联边数/B涉及的边数

P(A | B,C); //在上条基础上求加和,待改进

P(A,C | B); //与AC两节点相关联的边数/B的边数,待改进

P(ai | bj); //该bj特征与ai的边数/bj涉及的边数

P(ai | bj,ck); //在上条基础上求加和,待改进

P(ai,bj | ck); //ck与ai,bj两特征相关联的边数/ai,bj两特征的边数,待改进

以上这么多都是区别于传统概率论中的求解方法,因为节点之间表现发生与不发生的

标致就是之间有没有边!!

求两个节点间的概率

此问题的前提是,节点为大节点,内有若干特征,节点间的连接(或称为连线)实际为特征之间的连线。且两节点不是孤立的,而是在一个网络(或称一个图)中。

方法

利用已知的特征之间的边,来分别计算边的条数,直接用条数来计算概率。

example:

求条件概率P(A|B),A内有 a0,a1,a2;B内有b0,b1;

现求节点B“发生”的情况下节点A发生的概率,用公式推导P(A|B)=P(AB)/P(B);或者直接由实际出发,

可得出:

分子是AB间特征的连线条数,分母是B自己特征的全部连线条数,注意B除了与A点的特征相连外还与其他点相连。

由上述可用连线边数来求得概率。

alt

但是,现有一公式如图,

并不是用的节点间数边数的方法,而是进而细化到节点内的特征之间,最底层是数特征的边数,求得是P(ai|bj)的概率,概率最后加和,看似很完美。

但有个致命问题,P(ai|bj)的每一个都是概率值,0~1,对若干项加和后极有可能大于1 !!

说明这个公式是有问题的,目前的解决办法是:求加权平均

这个平均不是所有特征数的和,而是仅仅有概率的数量,即P(ai|bj)=0时,不算入其内。

目前暂且这样处理。

以上两种已java编程实现,结果有较大差异,不过上述思路大体正确,先记于此



😒 留下您对该文章的评价 😄


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
旅行商问题(Traveling Salesman Problem, TSP)是一个经典的组合优化问题,通常用于模拟一个旅行者访问一系列城市并返回起点的最短路径问题。Python是解决这类问题的理想语言,因为它有丰富的数学库和算法实现。 在Python,我们可以使用以下方法来求解旅行商问题: 1. **贪心算法**:这是一种较为简单的策略,但结果可能不是最优的,比如 Kruskal 或 Prim 算法适用于找到图中的最小生成树,但不能直接应用到TSP。 2. **动态规划(Dynamic Programming, DP)**:适用于问题有重叠子问题且最优解由子问题构成的情况,但计算复杂度较高,如 Held-Karp 算法。 3. **遗传算法(Genetic Algorithm, GA)**:将旅行商问题看作一个搜索问题,通过模拟自然选择过程寻找解决方案,适合求解大规模问题。 4. **模拟退火算法(Simulated Annealing, SA)**:一种全局优化算法,通过一定的概率接受较差解,以避免陷入局部最优。 5. **蚁群算法(Ant Colony Optimization, ACO)**:受蚂蚁觅食行为启发,通过建立信息素浓度模型来搜索路径。 6. **精确算法**:如 Christofides 算法或 Lin-Kernighan-Helsgaun 改进算法,虽然它们不是完全精确,但对于较小规模问题仍有效。 7. **近似算法**:如 2-OPT、3-OPT、K-opt 等局部搜索方法,这些算法速度快但可能不是最优解。 为了在Python实现,你可以使用 `networkx` 库来构建图,`scipy` 库进行计算,然后结合以上算法或使用专门的旅行商问题求解库,如 `ortools` 或 `concorde-tsp`。以下是基本的步骤: ```python import networkx as nx from ortools.constraint_solver import pywrapcp # 创建图 G = nx.Graph() # 添加节点和边 # ... # 转换为Google OR-Tools可处理的形式 problem = pywrapcp.LinearProgram() # 添加变量和约束 # ... # 设置目标函数最小化总距离 # ... # 运行优化器求解 solver = pywrapcp.Solver('Traveling Salesman') solution = solver.OptimizeSolution() # 输出解 path = [node for node in solution.Value(sequence_var).Solution().Intervals()] ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值