24、知识编译:因果图与规划优化

知识编译:因果图与规划优化

1. 因果图基础概念

因果图中的弧有两种产生方式:一种由过渡条件诱导,另一种由共现效应诱导。这两种方式产生的弧集并非相互排斥,同一条因果图弧可能由这两种原因共同产生。

从非正式的角度来看,如果目标变量值的变化依赖于源变量的值,那么因果图中就会存在从源变量到目标变量的弧。即使这种依赖表现为对源变量的影响,这样的弧也会被包含在内。

因果图有两种定义方式:
- 可达性定义 :若不考虑共现效应诱导的弧,变量 (v) 的因果图祖先集合 (anc(v)) 就是那些与改变 (v) 值相关的变量。可以通过从规划任务中消除 (anc(v)) 之外的所有变量,并相应简化公理和运算符来计算实现该目标的计划。
- 可分离性定义 :可达性定义下,仅考虑 (anc(v)) 生成的动作序列可能会修改 (anc(v)) 之外的变量,产生副作用。因此,可分离性定义更受青睐。

2. 无环因果图

当遵循因果图的可分离性定义时,在变量 (anc(v)) 上解决子任务时,无需改变 (anc(v)) 之外的任何值。由此得出以下结论:

观察 10.3.2 :若一个多值规划任务(MPT)(\Pi) 满足因果图 (CG(\Pi)) 无环、所有领域过渡图强连通、没有派生变量,且运算符或目标中没有明显错误的条件(如 (v = d) 且 (v = d’),其中 (d \neq d’)),那么 (\Pi) 有解。

这个结论与 Williams 和 Nayak 在一元运算符、无环因果图和可逆过渡的领域规划结果有相似之处。在可分离性定义下,无环因果图意味着运算符是一元的,因为具有多个效应的运算符会引入因果循环。领域过渡图的强连通性与 Williams 和 Nayak 的可逆性属性密切相关,但要求更弱。

解决多值规划任务的方法本质上是通过细化进行规划:
1. 构建一个非常抽象的骨架计划,即领域过渡图中的一条路径。
2. 通过添加运算符来满足路径过渡所需的前提条件,降低抽象级别。

领域过渡图的强连通性保证了每个抽象计划都可以细化为具体计划,这正是 Bacchus 和 Yang 的向下细化属性。

以下是解决具有无环因果图和强连通领域过渡图的 MPT 的算法:

def solve-easy-MPT(V, s0, s⋆, O):
    if s⋆ == []:
        # 目标为空:空计划即为解
        return []
    else:
        # 寻找一个不在 O 的前提条件或效应条件中出现的变量 v
        for v in V:
            if all(v not in precondition and v not in effect_condition for o in O for precondition, effect_condition in [(o.precondition, o.effect_condition)]):
                break
        V_prime = [var for var in V if var != v]
        O_prime = [o for o in O if not o.affects(v)]
        plan = []
        if s⋆[v] is not None:
            # 在 DTG(v) 中找到从 s0(v) 到 s⋆(v) 的过渡路径
            t1, ..., tk = find_path_in_DTG(v, s0[v], s⋆[v])
            for t in [t1, ..., tk]:
                # 递归找到实现 t 条件的计划
                cond, o = t.condition, t.operator
                s_prime_0 = get_state_after_executing_plan(plan, V_prime)
                plan.extend(solve-easy-MPT(V_prime, s_prime_0, cond, O_prime))
                plan.append(o)
        # 处理完 v 后,递归规划剩余变量的目标
        s_prime_0 = get_state_after_executing_plan(plan, V_prime)
        s_prime_star = {var: s⋆[var] for var in V_prime}
        plan.extend(solve-easy-MPT(V_prime, s_prime_0, s_prime_star, O_prime))
        return plan

该算法虽然无回溯,但执行时间可能呈指数级,因为生成的计划可能非常长。即使对于满足观察 10.3.2 条件的 MPT,最短计划也可能呈指数级。

3. 生成和修剪因果图

因果图在细化规划中的作用不仅限于无环情况。考虑任务变量的一个子集 (V’),它包含其所有因果图后代。一般来说,通过从初始状态、目标、运算符和公理中移除其他变量的所有出现,将任务限制在 (V’) 上,可得到满足 Knoblock 有序单调性属性的原始任务抽象。

然而,这种方法的一个主要问题是要求包含所有因果图后代具有很大局限性。规划任务的因果图通常是强连通的,在这种情况下,该技术无法抽象掉任何变量。不过,在启发式方法中,可以简化规划任务。通过忽略一些运算符前提条件进行启发式评估,可以使任意因果图无环。但忽略的实际任务方面越多,启发式对实际目标距离的近似就越差,因此目标是尽量少忽略信息。

具体步骤如下:
1. 生成“完整”因果图 :知识编译组件首先生成“完整”因果图。
2. 计算目标变量的因果图祖先 :计算目标中所有变量的因果图祖先,将不是目标祖先的状态变量从规划任务和因果图中消除,并移除相关的运算符和公理。
3. 计算修剪后的因果图
- 计算因果图的强连通分量,因为循环只出现在强连通分量内,所以可以分别处理每个分量。
- 对于每个连通分量,计算顶点的全序关系 (\prec),只保留满足 (v \prec v’) 的弧 (\langle v, v’ \rangle)。具体计算全序关系的方法如下:
- 为因果图中的每条弧分配权重,弧的权重为 (n) 表示它由 (n) 个公理或运算符诱导。顶点入弧的累积权重越低,为该顶点分配低级别时忽略的条件就越少。
- 选择入弧累积权重最小的顶点 (v),将其设置为最低级别,即对于强连通分量中的所有其他顶点 (v’),有 (v \prec v’)。
- 移除顶点 (v) 及其关联的弧,继续对剩余顶点应用相同的技术,直到只剩下一个顶点。
4. 修剪领域过渡图 :从 DTG(v) 的过渡标签中移除所有 (v \prec v’) 的变量 (v’) 的条件,并通过移除被支配的过渡来简化领域过渡图。

4. 因果图示例

以下是不同领域的因果图示例,展示了不同的图复杂度:
| 领域 | 描述 | 因果图特点 |
| ---- | ---- | ---- |
| Logistics | 包含两辆卡车、两架飞机和两个包裹的任务 | 图无环,无需修剪,且领域过渡图强连通,可使用 solve-easy-MPT 解决 |
| Mystery | 有三个位置、两辆卡车和两个包裹的任务 | 因果图包含一些局部循环。通过修剪从顶点 (l_i) 到 (f_j) 的弧,可忽略使用特定位置燃料时需移动卡车的情况;修剪从顶点 (p_i) 到 (c_j) 的弧,可忽略车辆通过装卸包裹改变容量的情况。通过修剪这些弧可消除所有循环,该领域表现较好 |
| Grid | 有任意数量位置,其中一个位置被锁定,有两把钥匙的任务 | 消除循环需要对机器人手臂状态进行一些小的放松,以及消除从 (l) 到 (r) 的弧(表示机器人进入锁定位置需先解锁) |
| Blocksworld | 典型的 MPT 编码使用一个状态变量 (h) 表示手是否为空,每个块使用两个状态变量 (t_i) 和 (b_i) | 变量 (h) 与所有其他状态变量有入弧和出弧,所有状态变量 (b_i) 相互双向连接。消除因果图中的循环会丢失大量信息,包含 Blocksworld 子问题的 Depots 领域在规划中表现较差 |

5. 后继生成器和公理评估器

除了良好的启发式指导,前向搜索规划系统还需要高效的方法来生成后继状态。在一些领域,虽然因果图启发式或其他流行方法能提供出色的目标估计,但由于计划长和分支因子大,规划仍然可能耗时过长。

Fast Downward 实现的最佳优先搜索变体不会为每个生成的状态计算启发式估计,仅为封闭节点计算,而将搜索前沿节点的计算推迟。在具有强启发式指导和大分支因子的领域,前沿节点的数量可能远远超过封闭节点的数量。例如,在解决卫星任务 #29 时,默认配置的 Fast Downward 仅为 67597 个世界状态计算启发式估计,却将 107233381 个状态添加到前沿。因此,快速确定适用运算符的集合至关重要。

为了解决这些问题,Fast Downward 使用了两种数据结构:后继生成器和公理评估器。

5.1 后继生成器

后继生成器是一种递归数据结构,与决策树非常相似。它由选择器节点和生成器节点组成:
- 选择器节点 :树的内部节点,有一个关联的选择变量 (v \in V),有 (|D_v| + 1) 个通过标记边访问的子节点,其中一条边标记为 (v = d)(对于每个 (d \in D_v)),另一条边标记为 (\top)(称为选择器的“不关心”边)。
- 生成器节点 :树的叶节点,有一个关联的运算符集合,称为生成的运算符集合。

每个运算符 (o \in O) 必须恰好出现在一个生成器节点中,从根节点到该节点的边标签集合(不包括“不关心”边)必须等于 (o) 的前提条件。

给定 MPT (\Pi) 的后继生成器和状态 (s),可以通过以下方式遍历后继生成器来计算 (s) 中适用的运算符集合:
- 在选择器节点,跟随边 (v = s(v)) 和“不关心”边。
- 在生成器节点,报告生成的运算符为适用。

构建后继生成器的方法是自上而下的算法,按任意顺序 (v_1 \prec v_2 \prec \cdots \prec v_n) 考虑任务变量。在根节点,选择 (v_1) 作为选择变量,根据运算符对 (v_1) 的前提条件对运算符集合进行分类。有前提条件 (v_1 = d) 的运算符将在通过相应标签边访问的根节点子节点中表示,而没有对 (v_1) 前提条件的运算符将在通过“不关心”边访问的根节点子节点中表示。在根节点的子节点中选择 (v_2) 作为选择变量,在孙节点中选择 (v_3),依此类推。为避免创建不必要的选择节点,如果树的某个分支中没有运算符对 (v_i) 有条件,则在该分支中不将 (v_i) 作为选择变量。当考虑完所有变量时,为与该分支关联的运算符创建一个生成器节点。

5.2 公理评估器

公理评估器是一种简单的数据结构,用于高效实现命题 Horn 逻辑的标记算法,并针对与 MPT 公理对应的分层逻辑程序进行了扩展和修改。

它由两部分组成:
- 一个索引数据结构,将给定的变量/值对和给定的公理层映射到该层中主体包含该对的公理集合。
- 一组计数器,每个公理一个,用于计算公理主体中尚未推导的条件数量。

在 Fast Downward 中,公理的评估分两步进行:
1. 将所有派生变量设置为默认值 (\bot)。
2. 按顺序为每个公理层执行 evaluate-axiom-layer 算法,以确定派生变量的最终值。

以下是 evaluate-axiom-layer 算法的伪代码:

def evaluate-axiom-layer(s, Ai):
    for a in Ai:
        a.counter = len(a.cond)
    for v in s:
        for a in Ai:
            if v == s(v) in a.cond:
                a.counter -= 1
    while any(a.counter == 0 and not a.considered for a in Ai):
        a = next(a for a in Ai if a.counter == 0 and not a.considered)
        v, d = a.head
        if s(v) != d:
            s(v) = d
            for a in Ai:
                if v == d in a.cond:
                    a.counter -= 1

通过维护一个触发公理的队列或栈,当公理的计数器达到 0 时将其插入,该算法可以很容易地实现为在线性时间内运行。Fast Downward 中 evaluate-axiom-layer 的实际实现比伪代码更高效,因为它避免了在算法初始化步骤中为每个层查看每个变量。

知识编译:因果图与规划优化

6. 后继生成器和公理评估器的作用与优势

后继生成器和公理评估器在规划系统中起着至关重要的作用,它们的优势体现在多个方面。

6.1 后继生成器的优势
  • 高效筛选适用运算符 :在规划过程中,需要快速确定在某个状态下哪些运算符是适用的。后继生成器通过其树状结构,根据变量的值和前提条件进行筛选,避免了对所有运算符进行逐一检查。例如,在状态 (s) 下,通过遍历后继生成器,只需要沿着与 (s) 中变量值对应的边进行搜索,就能快速找到适用的运算符集合,大大提高了搜索效率。
  • 结构清晰便于维护 :后继生成器的结构类似于决策树,每个节点都有明确的功能。选择器节点负责根据变量的值进行分支,生成器节点负责存储适用的运算符。这种清晰的结构使得代码的实现和维护更加容易,也便于对规划系统进行扩展和优化。
6.2 公理评估器的优势
  • 高效推导派生变量 :在规划任务中,常常存在派生变量,这些变量的值需要根据公理进行推导。公理评估器通过索引数据结构和计数器,能够高效地计算每个公理主体中尚未推导的条件数量。当某个公理的所有条件都被推导出来时,就可以触发该公理,更新派生变量的值。这种方式避免了对所有公理进行重复检查,提高了推导效率。
  • 线性时间复杂度 :通过维护一个触发公理的队列或栈,公理评估器可以在线性时间内完成对所有公理的评估。这意味着无论规划任务的规模有多大,公理评估的时间开销都能保持在一个合理的范围内,使得规划系统能够处理大规模的问题。
7. 不同领域因果图处理的总结与对比

不同领域的因果图具有不同的特点,处理方式也有所不同。以下是对前面提到的几个领域的因果图处理进行的总结与对比:

领域 因果图复杂度 处理方式 信息损失情况
Logistics 无环 无需修剪,可直接使用 solve-easy-MPT 算法解决
Mystery 有局部循环 通过修剪部分弧消除循环 信息损失相对较小
Grid 存在循环,需一定放松 对机器人手臂状态进行小放松,消除关键弧 有一定信息损失
Blocksworld 高度复杂,变量关联紧密 消除循环会丢失大量信息 信息损失严重

从这些对比中可以看出,因果图的复杂度越高,处理时需要进行的放松和修剪就越多,信息损失也越大。在实际应用中,需要根据具体的领域特点和规划需求,选择合适的处理方式,以在信息损失和规划效率之间找到平衡。

8. 因果图与启发式搜索的关系

因果图在启发式搜索中扮演着重要的角色。启发式搜索的目的是通过估计目标距离,引导搜索朝着更有希望的方向进行,从而提高搜索效率。因果图可以为启发式搜索提供有价值的信息,帮助生成更准确的启发式估计。

8.1 无环因果图与启发式搜索

在无环因果图的情况下,如 Logistics 领域,因果图的结构可以直接用于构建启发式函数。由于无环因果图意味着变量之间的依赖关系是单向的,因此可以根据变量的顺序依次计算目标距离,从而得到较为准确的启发式估计。这种情况下,启发式搜索可以更高效地找到最优解。

8.2 有环因果图与启发式搜索

对于有环因果图的领域,如 Mystery、Grid 和 Blocksworld 等,需要对因果图进行修剪和放松,以消除循环。修剪后的因果图可以作为启发式搜索的基础,但由于修剪过程中会丢失一些信息,启发式估计的准确性会受到一定影响。然而,通过合理的修剪策略,可以在信息损失和启发式效率之间找到一个较好的平衡点,使得启发式搜索仍然能够在可接受的时间内找到近似最优解。

下面是一个简单的 mermaid 流程图,展示了因果图在启发式搜索中的作用:

graph TD;
    A[初始规划任务] --> B[生成因果图];
    B --> C{因果图是否无环};
    C -- 是 --> D[直接构建启发式函数];
    C -- 否 --> E[修剪因果图];
    E --> F[基于修剪后的因果图构建启发式函数];
    D --> G[启发式搜索];
    F --> G;
    G --> H[找到规划解];
9. 未来发展方向与挑战

虽然因果图和相关的数据结构(如后继生成器和公理评估器)在规划领域取得了一定的成果,但仍然面临着一些未来的发展方向和挑战。

9.1 发展方向
  • 更智能的修剪策略 :目前的修剪策略主要基于贪心算法,虽然能够在一定程度上消除循环,但可能不是最优的。未来可以研究更智能的修剪策略,如基于机器学习的方法,通过学习大量的规划实例,自动找到最优的修剪方案,以减少信息损失。
  • 与其他技术的融合 :可以将因果图与其他规划技术(如强化学习、深度学习等)进行融合,充分发挥各种技术的优势。例如,利用深度学习对因果图进行特征提取,为强化学习提供更丰富的状态表示,从而提高规划系统的性能。
9.2 挑战
  • 大规模问题的处理 :随着规划任务的规模不断增大,因果图的复杂度也会急剧增加。如何在大规模问题中高效地生成、修剪因果图,并进行启发式搜索,是一个亟待解决的问题。
  • 信息损失的控制 :在处理有环因果图时,不可避免地会丢失一些信息。如何在保证规划效率的前提下,尽可能地减少信息损失,是提高规划系统性能的关键。
10. 总结

本文介绍了知识编译中因果图的相关概念、处理方法以及后继生成器和公理评估器等数据结构。因果图作为规划领域的重要工具,通过对变量之间依赖关系的建模,为规划问题的求解提供了有力的支持。不同领域的因果图具有不同的特点,需要采用不同的处理方式。后继生成器和公理评估器则通过高效的筛选和推导机制,提高了规划系统的搜索效率。

在未来的研究中,需要不断探索更智能的处理策略,克服大规模问题和信息损失等挑战,进一步提高规划系统的性能,使其能够更好地应用于实际场景中。

总之,因果图和相关技术在规划领域具有广阔的应用前景,通过不断的研究和创新,有望为解决复杂的规划问题提供更有效的方法。

计及风电并网运行的微电网及集群电动汽车综合需求侧响应的优化调度策略研究(Matlab代码实现)内容概要:本文研究了计及风电并网运行的微电网及集群电动汽车综合需求侧响应的优化调度策略,并提供了基于Matlab的代码实现。研究聚焦于在高渗透率可再生能源接入背景下,如何协调微电网内部分布式电源、储能系统大规模电动汽车充电负荷之间的互动关系,通过引入需求侧响应机制,建立多目标优化调度模型,实现系统运行成本最小化、可再生能源消纳最大化以及电网负荷曲线的削峰填谷。文中详细阐述了风电出力不确定性处理、电动汽车集群充放电行为建模、电价型激励型需求响应机制设计以及优化求解算法的应用。; 适合人群:具备一定电力系统基础知识和Matlab编程能力的研究生、科研人员及从事新能源、微电网、电动汽车等领域技术研发的工程师。; 使用场景及目标:①用于复现相关硕士论文研究成果,深入理解含高比例风电的微电网优化调度建模方法;②为开展电动汽车参电网互动(V2G)、需求侧响应等课题提供仿真平台和技术参考;③适用于电力系统优化、能源互联网、综合能源系统等相关领域的教学科研项目开发。; 阅读建议:建议读者结合文中提供的Matlab代码进行实践操作,重点关注模型构建逻辑算法实现细节,同时可参考文档中提及的其他相关案例(如储能优化、负荷预测等),以拓宽研究视野并促进交叉创新。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值