28、多应用协调基于效用的自适应:原理与技术解析

多应用协调基于效用的自适应:原理与技术解析

在当今的移动设备使用场景中,多个应用同时运行是常见的情况。为了确保用户能获得最佳的使用体验,应用的自适应机制变得至关重要。本文将深入探讨多应用协调基于效用的自适应技术,包括应用变体的有效性、效用函数、应用状态与自适应、应用间的间接依赖、自适应事件及受影响的应用分类,以及几种自适应推理技术。

应用变体与效用
  • 应用变体的有效性 :一个应用变体要有效,需满足两个条件。首先,它必须有足够的资源,即每个资源的需求量小于可用量;其次,它只能使用已安装的计划。如果用户移除了某个变体所使用的计划,那么这个原本有效的运行变体将变得无效。
  • 效用与效用函数 :许多应用变体为用户提供相同的功能,但质量往往不同。某个变体满足用户需求的程度被称为该变体的效用,其值是介于 0 到 1 之间的实数。每个应用变体都有一个关联的效用函数,运行中的应用在特定时间点的效用通过在当前上下文中评估当前变体的效用函数得出。正式地,效用函数是一个映射 $f_u : V × C → [0, 1]$,其中 $V$ 是变体集合,$C$ 是可能的上下文集合。
    • 优先级与加权效用 :当处理多个应用时,用户对它们的兴趣程度不同。可以为应用分配优先级,这是一个介于 0 到 1 之间的实数。未加权的效用称为原始效用,优先级使用户能够根据实际需求权衡应用的相关性。应用的优先级与原始效用的乘积是该应用的加权效用,所有运行应用的加权效用之和,通过其权重之和进行归一化,得到总体加权效用 $u_{ow} = \sum_{n}p_iu_i / \sum_{n} p_i$,简称为总体效用。基于效用的自适应假设总体加权效用等于用户满意度,并旨在始终保持该数值较高。
应用状态与自适应
  • 应用状态 :安装的应用根据用户的兴趣可以处于使用或未使用状态,因此应用有两种不同的状态:已安装和运行,用户可以启动和停止它们。应用状态的转换可以用以下状态图表示:
stateDiagram
    [*] --> installed
    installed --> starting : start
    starting --> running : success
    starting --> aborted : fail
    running --> terminated : stop
    running --> running : adapt
    running --> terminated : no valid variant
  • 自适应过程 :启动应用时,中间件会选择并配置其初始变体。当发生可能使当前变体次优的事件时,中间件需要进行自适应,即重新考虑所有运行应用的当前有效变体及其优先级。如果必要,它需要将某些应用的当前变体替换为另一个变体。这个过程的第一步称为自适应推理,第二步称为重新配置,重新配置步骤会透明地处理状态转移。自适应推理除了重新配置运行中的应用或保持其不变外,还可以决定终止应用,即在没有用户请求的情况下停止它。
应用间的间接依赖

多个独立运行在同一设备上的应用,虽然在功能上彼此不依赖,但通过共享系统资源存在间接依赖关系。在资源受限的情况下,给一个应用更多的资源意味着从另一个应用中拿走资源。因此,分配可用资源是找到有效变体集的一部分。同样,如果应用的加权效用发生变化,也需要考虑所有运行的应用来找到具有最高总体效用的变体集。由于这种间接依赖关系,维持最佳总体效用可能会导致应用终止。例如,两个可以同时运行的应用,如果一个应用的某个变体具有高加权效用但使用了大量资源,导致第二个应用的任何变体都无法运行,那么中间件可能会停止第二个应用。

自适应事件与受影响的应用
  • 自适应事件分类 :可以将自适应事件分为五类:
    • 应用状态变化 :用户请求启动或停止应用会导致此类事件。
    • 计划变化 :用户可以随时安装和卸载计划。添加计划可能会影响应用的效用,因为它可能允许新的变体来提高效用;移除已使用的计划会使使用该计划的应用无效,移除未使用的计划则没有影响。
    • 上下文变化 :如果应用依赖于特定的上下文元素,该元素的变化可能会导致该应用所有变体的效用发生变化。由于从上下文到效用的映射是任意的且无法预见,找到新的最佳变体需要检查所有变体。不过,运行中的应用无论上下文如何变化都可以继续运行,尽管其效用可能不再是最优的。
    • 优先级变化 :应用的优先级会缩放应用的原始效用。因此,优先级的变化不会影响变体的有效性,也不会影响应用变体在效用方面的排序。当然,更改应用优先级可能会通过间接依赖关系使当前变体集次优。
    • 资源变化 :应用的变体在系统资源的使用上有所不同。由于应用之间的间接依赖关系,可用资源的数量决定了有效变体的集合。
  • 受影响应用的分类 :根据自适应事件对运行应用的影响方式,可以将应用分为四类:
    • 需要自适应 :包含启动、停止或使用已移除计划的应用。此类应用必须由中间件进行自适应。不在此类的应用不需要自适应,尽管它们的效用可能较低,但事件前后所有有效变体仍然有效。对于这些应用,中间件可以决定跳过自适应推理和重新配置。
    • 效用改变 :包含受上下文变化影响的应用。由于受影响变体的效用任意变化,在没有自适应的情况下,无法确定是否有更好的有效变体。
    • 效用相似 :包含有新计划和新优先级的应用,以及在资源增加情况下的任何应用。有新计划的应用,其先前有效变体的效用函数不变,但可能有新的变体可用。资源增加时,任何应用都属于此类。如果应用有新的优先级,其变体集不变,但效用函数会按常数因子缩放。
    • 未受影响 :包含未直接受任何自适应事件影响的所有应用。对未受影响的应用进行自适应最不可能提高总体效用,但由于应用之间的间接依赖关系,与受影响的应用一起对其进行自适应可能仍然有用。
自适应推理技术
  • 资源受限移动环境下的自适应 :在移动环境中,自适应由作为中间件一部分运行的单个算法执行,没有资源进行广泛的协商和等待外部咨询。自适应过程从应用的角度来看是原子性的,并且可能会影响中间件控制的所有应用。应用自适应包括自适应推理和重新配置两个部分。更改运行中的变体或启动应用都需要这两个步骤。自适应推理计算成本高,但不会停止正在推理的应用;重新配置比推理成本低,但需要暂停和重新启动运行中的应用。对一个应用进行自适应推理会生成一个按效用排序的所有有效变体列表,并且在一次自适应过程中,每个应用最多进行一次自适应推理。
  • 暴力法和贪心算法
    • 暴力法 :暴力法自适应技术可以作为自适应推理的基线。它会搜索所有应用的所有变体集,始终对所有应用进行自适应推理,并且不区分自适应事件。通过应用两个优化标准来考虑终止处理:首先优先选择大的有效变体集,其次优化总体加权效用。因此,暴力法会优先选择大的、低产出的变体集而不是具有高效用的单个变体。在资源丰富的情况下,如果所有应用都能运行,暴力法将产生最优效用。但缺点是,它的时间复杂度与变体数量呈指数关系,如果应用有 $p$ 个,每个应用有 $q$ 个变体,那么它会考虑 $p^q$ 个变体集。
    • 贪心算法 :贪心自适应技术对每个应用单独进行自适应推理,然后逐个选择应用,优先选择提供具有最高加权效用的有效变体的应用。如果资源用完,它会停止剩余的应用或中止其启动。通常,贪心算法评估的变体组合比暴力法少得多,最多为 $p × q$。但贪心算法的缺点是,所选的应用变体可能会迅速耗尽可用资源,因此用户通常能够运行的应用数量比使用最优的暴力法时少。
  • 宁静贪心算法 :为了避免自适应的非功能缺点,最简单的方法是不进行自适应。但像暴力法和贪心算法这样总是对所有应用进行推理并随意重新配置的技术,容易浪费资源、使应用停滞,并因过于敏感而惹恼用户。而不进行自适应可能会导致总体效用次优。宁静贪心算法试图在最优性和自适应的非功能方面之间取得务实的平衡。它通过两种方式实现这一点:一是使用重要性的概念,即只有当改进被认为是显著时,才对系统进行非强制的更改;二是根据自适应事件影响的应用分类来猜测自适应是否显著。以下是宁静贪心算法的主要代码:
sereneGreedy
c_sig := 0.1
/* Double value in the range [0,1] */
A := set of all applications; sumP := 0
while(|A| > 0)
    S := {t | a in A, t:=getSereneGuess(a, c_sig), t!=null}
    if(S == {})
        terminateOrAbortStarting(A)
        return
    else
        (p_a, u_a, v_a) := tuple in S with highest p_a*u_a
        A := A\{a}; sumP := sumP + p_a
        if(p_a*u_a/sumP >= c_sig || cannotContinueToRun(a))
            establishVariant(v_a)
        else
            continue(a)

该算法的主循环收集可实现的加权效用的猜测值,选择猜测值最佳的应用,然后要么重新配置它,要么保持其运行不变。如果有保持不变的选项,并且更改不会带来显著的改进,则选择保持不变。

综上所述,多应用协调基于效用的自适应是一个复杂但重要的领域,不同的自适应推理技术各有优缺点。宁静贪心算法通过平衡最优性和非功能方面,为资源受限的移动设备提供了一种更务实的自适应方法。在实际应用中,需要根据具体的场景和需求选择合适的自适应技术,以确保用户能够获得最佳的使用体验。

多应用协调基于效用的自适应:原理与技术解析

宁静贪心算法的深入分析

宁静贪心算法的核心在于平衡最优性和自适应的非功能方面。它引入了重要性阈值 c_sig ,这个值的设定对于算法的性能有着关键影响。 c_sig 是一个介于 0 到 1 之间的双精度值,在代码中初始化为 0.1。这个值决定了何时对应用进行重新配置,即只有当应用的加权效用改进超过这个阈值时,才会进行重新配置操作。

在算法的主循环中,首先会收集所有应用的可实现加权效用的猜测值,存储在集合 S 中。 getSereneGuess(a, c_sig) 函数用于获取每个应用 a 的猜测值,只有当猜测值不为空时才会加入集合 S 。如果集合 S 为空,说明没有可实现的有效变体,此时算法会终止或中止正在启动的应用。

接下来,算法会从集合 S 中选择加权效用最高的应用 a ,并将其从应用集合 A 中移除,同时更新优先级总和 sumP 。然后,算法会判断是否需要对该应用进行重新配置。如果应用的加权效用与当前优先级总和的比值大于等于 c_sig ,或者该应用无法继续运行,那么就会调用 establishVariant(v_a) 函数对其进行重新配置;否则,应用将继续保持当前状态运行。

不同自适应推理技术的对比

为了更直观地对比暴力法、贪心算法和宁静贪心算法的优缺点,我们可以通过以下表格进行分析:
| 算法名称 | 优点 | 缺点 | 适用场景 |
| — | — | — | — |
| 暴力法 | 在资源丰富时能产生最优效用,优先考虑大的有效变体集 | 时间复杂度与变体数量呈指数关系,计算成本高 | 资源丰富、变体数量较少的场景 |
| 贪心算法 | 评估的变体组合少,计算速度相对较快 | 所选变体可能迅速耗尽资源,用户可运行应用数量少 | 对计算速度要求较高、资源相对充足的场景 |
| 宁静贪心算法 | 平衡最优性和非功能方面,避免不必要的重新配置 | 需要合理设置重要性阈值,否则可能影响性能 | 资源受限、对用户体验要求较高的移动设备场景 |

自适应过程的流程图

下面是一个 mermaid 格式的流程图,展示了应用自适应的整体过程:

graph TD
    A[自适应事件发生] --> B{事件类型判断}
    B -->|应用状态变化| C[启动/停止应用处理]
    B -->|计划变化| D[检查计划影响]
    B -->|上下文变化| E[重新评估效用]
    B -->|优先级变化| F[调整加权效用]
    B -->|资源变化| G[重新确定有效变体集]
    C --> H[自适应推理]
    D --> H
    E --> H
    F --> H
    G --> H
    H --> I{是否需要重新配置}
    I -->|是| J[重新配置应用]
    I -->|否| K[保持应用状态]
    J --> L[更新应用状态]
    K --> L
    L --> M[结束自适应过程]
实际应用中的考虑因素

在实际应用中,选择合适的自适应推理技术需要考虑多个因素。首先是资源的可用性,包括计算资源和系统资源。如果资源丰富,暴力法可能是一个不错的选择,因为它能够保证最优的效用;但如果资源受限,贪心算法或宁静贪心算法可能更合适。

其次,要考虑应用的特点和用户的需求。对于一些对性能要求较高、不希望频繁出现应用停滞或界面变化的应用,宁静贪心算法可以通过减少不必要的重新配置来提高用户体验。而对于一些对计算速度要求较高、对资源消耗不太敏感的应用,贪心算法可能更能满足需求。

此外,还需要考虑自适应事件的发生频率和类型。如果自适应事件频繁发生,那么算法的计算效率就显得尤为重要;如果某些类型的事件对应用的影响较大,那么在选择算法时需要重点考虑这些因素。

总结与展望

多应用协调基于效用的自适应是一个充满挑战和机遇的领域。通过对应用变体的有效性、效用函数、应用状态与自适应、应用间的间接依赖、自适应事件及受影响的应用分类等方面的深入研究,我们可以更好地理解自适应的原理和机制。

不同的自适应推理技术各有优缺点,在实际应用中需要根据具体的场景和需求进行选择。宁静贪心算法通过引入重要性阈值和对应用分类的考虑,为资源受限的移动设备提供了一种更务实的自适应方法。

未来,随着移动设备性能的不断提升和应用场景的不断丰富,自适应技术也将不断发展和完善。例如,可以进一步研究如何更准确地评估应用的效用,如何更好地处理应用间的间接依赖关系,以及如何优化自适应算法的性能等问题。相信在不久的将来,自适应技术将为用户带来更加流畅、高效的移动应用体验。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值