system: [SYSTEM]

user: 4. 规则合成算法 现有的SyGuS解决方案是为了解决精确SyGuS问题而设计的，而不是用来优化SyGuS问题，它发现一个BMR，使给定的优化度量最大化。在本节中，先给出一个朴素方法解决优化SyGuS问题。然后，给出了新规则合成算法(4.2节)。 4.1. 朴素方法和局限 事实上，给定一组示例、语法和约束，满足所有示例中所有约束的BMR可能不存在。因此，可以将目标转移到求满足示例子集的所有约束的BMR。 朴素方法一般情况，一个简单的方法是从正例中选择多个随机的子集S，并对S中的每个子集调用SKETCH SyGuS合成求解器 [ 18 ]。然后可以选择性能最好的基于最优度度量的BMR对E中的所有实例进行了评价。 局限性。朴素方法有三个局限性。 (1) 从正例中选择多个随机的子集S可能导致生成的规则缺失某些高值匹配规则。因为随机选择具有概率性，不一定能完全找到所有的属性正例。 (2) 虽然选择了正例的子集，能够合成一个对示例集有良好覆盖的BMR。但选择的正例并不一定肯定是正确的。因为我们生成的样本可能具有一定的错误。 (3) 符号求解器中，需要对数值相似函数和阈值进行推理，但现有求解器并不支持这样的推理。 4.2. 改进的规则合成算法(Rule Evolution) 下面介绍提出的新算法。首先在算法中从实例中正例中选择一个实例进行生成BMR规。 对于局限(1)，对使用的正例集根据属性的显著度进行排序。每次根据属性显著度从高到低添加实例。 对于局限(2)，本文采用反例验证的思想，对生成的BMR规则，在实例上进行验证，如果反例的属性依然满足BMR规则，则BMR是合格的，否则将反例添加进实例集，重新生成BMR，生成的BMR迭代直到没有反例满足BMR规则，将其输出。 对于局限(3)，通过添加了一个自定义合成器，用于在符号求解器中找到数值的阈值。 算法。在算法1中给出算法命名为Rule Evolution，它有两个循环。外部循环(第3~17行)根据属性显著度抽取的实例样本来引导合成算法。在每次迭代中，给定一个样本e 0 (第5行)，它从(第6行)开始Synth，然后调用内部(CEGIS)循环(第7~16行)。在每次迭代中，它首先合成一个BMR(第8行)，然后它将在反例集中验证发现反例(9行)。如果没有反例，过程将终止(10~11行)，否则一个随机选择的反例将被添加到未来的CEGIS迭代中(12~14行)。当前最好的BMR将回馈(15行)。最后，算法将返回一个BMR (第18行)。下文将解释该算法的各个部分。 算法1：Rule Evolution 输入：实例集(包含正例反例) 相似度函数集F 语法边界 G B M R ( N a ， N d ) 最优评价 μ N a : Bound on attribute-matching rules K CEGIS : Bound on CEGIS iterations 输出： Φ * : A BMR from G B M R ( N a ， N d ) maximizing μ 1 n a ← 1 2 Φ * ← 0 3 while n a < N a do //attribute-matching rules loop 4 i ← 0 5 e 0 ← sample ( M ) 6 E syn ← List ( e 0 ) 7 while i CEGIS do // CEGIS loop 8 Φ i ← Synth ( G B M R ( N a ， N d ) ， E SYN ， f ) 9 E ¯ Φ i ← V e r i f y ( Φ i ， E ) // Counter-examples 10 if E ¯ Φ i = ∅ then 11 return Φ i 12 else 13 e i + 1 ← sample ( E ¯ Φ i ) 14 E SYN ← E SYN ∗ a p p e n d ( e i + 1 ) 15 Φ * = arg max Φ ∈ { Φ * ， Φ i } μ ( Φ ， M ， D ) 16 i ← i + 1 17 n a ← n a + 1 18 return Φ * 自定义的合成例程：我们从核心的合成例程(第8行)开始，它解决了SyGuS问题，即它从有界语法 G B M R ( N a ， N d ) 中搜索满足E SYN 中示例所有约束条件的候选BMR。Sketch通过符号化地分析语法和约束的每个部分，并将搜索问题简化为一个布尔可满足性(SAT)问题。用Sketch直接解决搜索问题是不切实际的，因为它涉及到复杂的数值函数的推理。为了用Sketch解决这个问题，本文提出一个新的算法，允许Sketch与处理相似函数分析和综合阈值的定制求解器合作，而Sketch则为BMR做出离散决策。 Sketch合成器做了以下工作： 1) 用多个元素或属性匹配规则扩展 G B M R 语法； 2) 在E SYN 中选择示例为正( E + )或反( E − )作为扩展后的BMR的元素； 3) 选择属性 i ∈ [ 1 ， n ] 和相似函数 f ∈ F 用于这些元素或规则。 自定义求解器发现一个数值阈值，将通过Sketch为元素选择的正示例(E’)和反示例(E)分隔开(如果存在的话)。此外，它要求Sketch求解器回溯并做出可选的离散决策。这个求解器将在Sketch中被多次调用。算法2给出了该求解器的伪代码。 算法2：自定义求解器 输入：f: Chosen similarity function a: 匹配的属性ID E + : Examples chosen to be positive E − : Examples chosen to be negative 输出: exists: Does a valid threshold exist : A valid threshold separating E + & E - 1 θ atmost ← 1.0 2 for e ∈ E + do 3 θ atmost = min ( θ atmost ， e v a l l S I M F n ( e ， a ， f ) ) 4 θ atleast ← 0.0 5 for e ∈ E − do 6 θ atleast = max ( θ atleast ， e v a l l S I M F n ( e ， a ， f ) ) 7 if θ atleast < θ atmost then 8 exists←true 9 θ ← θ atmost + θ atleast 2 10 else 11 exists←false 本文提出的算法5利用相似度函数的单调性进行来区分正反例。一般来说，单调性要求在至少一个相似度函数上，任何一对匹配记录都具有比非匹配对更高的相似度值。所以，从正例中选择某一属性的相似度值最小的与同一属性的反例中相似度值最大进行比较，如果某一属性的反例的相似度值小于正例 的相似度值，那么这个属性合理，相似度函数可以使用，并且区分正反例的阈值为 θ = θ atmost + θ atleast 2 。 反例引导归纳合成(CEGIS)。本文使用反例引导归纳合成GEGIS的思想构建迭代算法，该算法有两个阶段：Synth (第8行)和Verify (第9行)。其想法是迭代地合成一个适用于少量示例的BMR，并通过仅添加合成程序目前没有正确处理的那些示例，以巧妙的方式扩展此集合。 假设算法选择了作为第一个正例，Synth返回函数 Φ 0 = J arrard [ n a m e ] ≥ 0.6 。Verify在 M ∪ D 中的所有例子上验证这个函数，并随机选取一个作为反例，即一个示例没有被函数正确匹配，因为对于 ，name属性不完全相等。然后，它将把这个反例添加到E SYN 集合中，并开始下一个CEGIS迭代。在此迭代中，Synth可以返回匹配所有正确的例子函数 Φ 1 = J arrard [ n a m e ] ≥ 0.8 。 在迭代i次，Synth使用当前可用的例子 E SYN = { e 1 ， e 2 ， ⋯ } ，并且用Sketch解决SyGuS问题，从边界语法 G B M R ( N a ， N d ) 中来找到一个BMRΦ i ，BMRΦ i 可以正确处理所有的例子。另一方面，Verify考虑了 E = M ∪ D 所有的例子，来识别了Φ i 未正确处理的实例。反例 e i + 1 从Φ i 中挑选出来添加到集合E SYN 中，以便在下一次Synth阶段中运用。这个过程将一直持续下去，直到Synth无法找到满足当前示例集的BMR，或者直到它执行了KCEGIS (CEGIS )迭代。如果验证不能找到任何反例(即 E ¯ Φ i = ∅ )，算法终止并输出Φ i 作为最优BMR，因为它可以正确地处理所有例子E。 属性匹配引导合成。本文在CEGIS循环之上构建另一个循环，使用不同的初始示例(e0)多次重新启动它。其思想是，按照属性显著度的排序将正例输入，在CEGIS循环中进行验证，验证没有反例后，再次选择新的属性正例进行迭代，如果重启的数量达到N a (属性匹配截止)，那么该算法终止并输出CEGIS和属性匹配迭代中最好的BMRΦ * 。