现代优化算法
什么是优化?就是从各种方案中选取一个最 好的。从数学角度看,优化理论就是研究如 何在状态空间中寻找到全局最优点。
比如水泥混凝土的性能,涉及到水、沙、石
子、水泥和其他掺杂物比例。学校课程表排
课问题、售票员上岗问题、公司内部人员安
排出效益等。降低成本、提高效益是问题的
关键。
一般的优化具有下面形式:
minf (x1, x2, …, xn) s.t. g(x) 0 , xD
其中 x1, x2, …, xnΩ (即问题的可行域,代表问题 参数的选择范围),即 minf (X) ,其中 XΩ (矢量 形式)。 f(x) 是决策问题的数学模型,也是决策问 题的目标函数, g(x) 0 是决策问题的约束条件, D 是决策问题的定义域(可行域)。问题归结为求极 值。极值点非常多,需要找到全局最小点。
习惯上,将优化算法分为两类:局部优化算 法和全局性优化算法。前者可以称为经典优 化算法,已经得到了人们广泛深入的研究。
线性规划、整数规划、 0–1 规划、非线性规
划、排队论、决策论。后者习惯上称为现代
优化算法,是 20 世纪 80 年代兴起的新型全
局性优化算法,主要包括禁忌搜索、模拟退
火、遗传算法、神经网络等,其主要应用对
象是优化问题中的难解问题,即 NP–hard 问
题
算法比喻
为了找出地球上最高的山,一群有志
气的兔子们开始想办法。
方案一:兔子们吃了失忆药片,并被发射到 太空,然后随机落到了地球上的某些地方。他 们不知道自己的使命是什么。但是,如果你过 几年就杀死一部分海拔低的兔子,多产的兔子 们自己就会找到珠穆朗玛峰。
遗传算法
方案二:兔子们朝着比现在高的地方跳去,
它们找到了不远处的最高山峰。但是这座山不 一定是珠穆朗玛峰。其实,它们这种做法只是 自己心理上认为找到了最高的山,并不能保证 局部最优值就是全局最优值。
方案三:兔子们知道一个兔子的力量是渺小 的。于是,它们互相转告着,哪里的山已经找 过,并且找过的每一座山他们都留下一只兔子 做记号。这样,它们制定了下一步去哪里寻找 的策略。
禁忌搜索法
方案四:兔子们用酒将自己灌醉了。它们随 机地跳了很长时间。在这期间,它们可能走向 高处,也可能踏入平地。但是,随着时间的流 逝,它们渐渐清醒了并朝最高方向跳去。
模拟退火法
一 遗传算法
遗传算法是模拟生物在自然环境中的遗传和进化过 程而形成的一种自适应全局优化概率搜索算法。
它最早由美国密执安大学的 Holland 教授提出,起 源于 60 年代对自然和人工自适应系统的研究。 70 年代 De. Jong 基于遗传算法的思想在计算机上进 行了大量的纯数值函数优化计算实验。在一系列研 究工作的基础上。 80 年代由 Goldberg 进行总结,
形成了遗传算法的基本框架。
一 遗传算法
其主要特点是群体搜索策略和群体中个体之间的信 息交换,搜索不依赖于梯度信息。
它的应用范围非常广泛,尤其适合于处理传统搜索 方法难于解决的复杂和非线性问题,可广泛用于组 合优化,机器学习,自适应控制,规划设计和人工 生命等领域,从而确立了它在 21 世纪的智能计算技 术中的关键地位。
1 遗传算法的基本步骤
遗传算法流程图如下:
集团中个体适应度的检测评估
选择 交叉
变异
编码和初始集团生成
一、编码
遗传算法主要是通过遗传操作对群体中具 有某种结构形式的个体施加结重组处理,从 而不断地搜索出群体中个体间结构相似性,
由此可见,遗传算法不能直接处理问题空间 参数,必须把它们转换成遗传空间的由基因 按一定结构组成的染色体或个体。这一转换 操作就叫做编码。编码方法主要有:二进制 编码, Gray 编码,动态编码,实数编码,
有序串编码,多参数编码,可变长编码等。
(一)一维染色体编码(二值编码)
所谓一维染色体编码是指搜索空间的参数转换到 遗传空间过后,其相应的基因呈一维排列构成的 染色体。具体地说,在遗传空间中,用以表示个 体的字符集中的要素构成了字符串。如 {a,b,c,d}
或 {1,2,3,4} 。
一维染色体编码中最常用的符号集是二进制符号 {0,1} ,基于此符号集的个体呈二值码串。二值编 码的一般方法是:
(1) 根据所需要的精度确定参数的串长;
(2) 解码,由二值串转化成实数;
例如: x=13, 可被表示为 01101 。
(二)多映射编码(多参数)
在优化问题求解中常常会遇见多参数优化问题。
其基本思路是将每一个参数进行二值编码得到 子串,每个子串对应各自的编码参数,然后将 子串构成一个完整的染色体串。
二、 初始群体的生成
遗传操作是对于多个体同时进行的。这众多的个体组成了 群体。在遗传算法处理流程中,继编码设计后的任务是初 始群体的设定,并以此为起点一代代进化直到按某种进化 停止准则终止进化过程,由此得到最后一代(或群体)。
其中需要考虑到两个因素:初始群体的设定;进化过程中 各代(群体)的规模如何维持?它和交叉概率变异概率等 参数一样,对于遗传算法效能的发挥是有影响的。初始群 体的设定可采取如下策略:
(1) 根据问题固有的知识,设法确定最优解所占空间在整个 问题空间中的分布范围,然后,在此分布范围内设定初始 群体。
(2) 先随机生成一定数目的个体,然后从中挑出最好的个体 加到初始群体当中去。这种过程不断迭代,直到初始群体 中个数达到了预先确定的规模。
三、适应度函数
适应度函数表明个体或解的优劣性。不同的问题,适应性 函数的定义方式也不同。这一操作是借用了达尔文的自然 选择原则,即个体适应度越高,其被选择的个体越多。
遗传算法在进化搜索中基本上不用外部信息,仅用目标函 数即适应度函数为依据。遗传函数的目标函数不受连续可 微的约束且定义域可以为任意组合。对目标函数的唯一要 求是,针对输入可计算出能加以比较的非负结果,这一特 点使得遗传算法运用很广。在具体的应用中适应度函数的 设计要结合求解问题本身的要求而定,要强调的是,适应 度函数评估是选择操作的依据,适应度函数的设计直接影
目标函数映射成适应度函数
在许多问题求解中,其目标函数是求取费用函数
(代价函数) g ( x )的最小值,而不是求效能 函数或者利润函数的最大值。由于遗传算法中,
适应度函数要比较排序并在此基础上计算选择概 率,所以适应度函数的值要取正值。由此可见,
在不少场合,将目标函数映射成最大值形式且函 数值非负的适应度函数是很有必要的。在通常情 况下,要把一个最小化函数转化为最大化问题,
只需要简单的把费用函数乘以 -1 ,即以下两种基 本方法:
( 1 )如目标函数为最大化问题:
( 2 )如目标函数为最小化问题:
但这对遗传算法而言,这种方法还不足以保证在 各种情况下的非负值。对此可以采用以下的方法 进行转换:
( 3 )
其中 可以采用目前 g(x) 出现过的最大值或者 当前群体当中出现过的最大值,但最好与群体无
max
( ), ( )
max( ) 0,
C g x g x C
f x
当 其他情况
Cmax( ( )) ( ) Fit f x f x
( ( )) ( ) Fit f x f x
当求解问题的目标函数采用利润函数形式时,为 了保证其非负性,可用如下变换式:
( 4 )
式中系数 可以式适合的输入值,或是当前一 代或者前面几代中的 g ( x )的最小值,也可以 是群体的方差。
第三、四两种方法是对第一、二两种方法的改进
,但有时存在界限值预先估计困难,不可能精确 的问题,为此有下面两种改进的方法:
min, min 0
( ) 0,
C C
f x
u(x)+当u(x)+
其他情况
Cmin
(5) 若目标函数为最小问题 :
(6) 若目标函数为最大问题:
( ( )) 1
1 ( )
Fit f xc f x
c 0,c f x ( ) 0( ( )) 1
1 ( )
Fit f xc f x
c 0,c f x( ) 0
四、遗传操作
遗传操作是模拟生物基因遗传的操作。在遗传算 法中,通过编码组成初始群体后,遗传操作的任 务就是对群体的个体按照他们对环境适应的程度
(适应度评估)施加一定的操作,从而实现优胜 劣汰的进化过程,从优化搜索的角度而言,遗传 操作可以使问题的解,一代又一代地优化,并逼 近最优解。遗传算法的基本操作包括以下三个基 本算子:选择,交叉 , 变异。
(一)选择:选择的目的是为了从当前群体中选 出优良的个体,使它们有机会作为父代为下一代 繁殖子孙。进行选择的原则是适应性强的个体为 下一代贡献一个或多个后代的概率大。以下介绍 目前几种常用的选择算子:
( 1 )适应度比例方法 (fitness proportional model) 适应度比例方法是目前遗传算法中最基本也是最
常用的选择方法,他也叫赌轮或蒙特卡罗
( monte carlo )选择。该方法中各个个体的选择
设群体的大小为 n ,其中个体 i 的适应度值为 , 则 i 被选择的概率为
显然,概率 反映个体 i 的适应度在总和中所占 的比例,个体的适应度越大,其被选择的概率就 越高,反之亦然,计算出群体中各个个体的选择 概率后,就可以决定那些个体可以被选出。
fi
1 n
i i j
j
p f f
pi
( 2 )最佳个体保存方法( elitise model )
该方法的思想是把群体中适应度最高的个体不进行配对而 直接复制到下一代中,此种选择操作又称复制( copy )。
其定义如下:
设到时刻 t (第 t 代),群体 A(t) 中 为最佳个体。又 设 A(t+1) 为新一代群体,若 A(t+1) 中不存在 ,则把 作为 A(t+1) 中的第 n+1 个个体(其中, n 为群体大小)
。
此方法的优点是,进化过程中某一代的最优解可不被交叉 和变异操作所破坏。这也隐含了一种危机,即局部最优个 体的基因会急速增加而使进化有可能限于局部解,也就是
*
( )
a t*
( )
*
( )
a t a t(二)交叉:交换操作是遗传算法中最主要的遗传
操作。在遗传算法中使用交叉算子来产生新的个 体。对于占主流地位的二进制编码而言,各种交叉算 子都包括两个基本容:
1 )从有选择操作形成的配对库( mating pool ) 中,对个体随机配对,并按预先设定的交叉概率 来决定每对是否需要进行交叉操作;
2 )设定配对个体的交叉点( cross site ),并 对这些点前后的配对个体的部分结构(或基因)
进行相互交换。
基本交叉算子如下:
单点交叉( one-point crossover ),它是指在个 体编码串中只随机设置一个交叉点,然后在该点 相互交换两个配对个体的部分染色体。
双点交叉( two - point crossover )是指在个体 编码串中随机设置了二交叉点,然后再进行部分 基因交换。双点交叉了的具体操作过程是:在相 互配对的两个个体编码串中随机设置两个交叉点
;交换两个个体在所设定的两个交叉点之间的部
(三)变异:变异首先在群体中随机选择一个个体,对于 选中的个体以一定的概率随机地改变串结构数据中某个串 的值。同生物界一样, GA 中变异发生的概率很低,通常 取值在 0.001~0.01 之间。遗传算法导入变异的目的有两个
:一是使遗传算法具有局部的随机搜索能力。二是使遗传 算法可维持群体的多样性,以预防出现群体未成熟收敛现 象。
变异算子的基本内容是对群体中的个体串的某些基因座上 的基因值作变动。就基因字符 {0,1} 的二进制码串而言,
变异操作就是把某些基因座上的基因值取反,一般来说具 有以下两个步骤:在群体中所有个体的码串范围内随机的 确定基因座;以事先设定的变异概率来对这些基因座的基 因值进行变异。
1 .基本变异算子
基本变异算子是指对群体中的个体码串随机挑选 一个或者多个基因座,并对这些基因座的基因值 做变动(以变异率 做变动), {0 , 1} 二进制码 串中的基本变异操作如下:
2 .逆转变异算子( inversion operator )
逆转变异算子是变异算子的一种特殊形式。它的 基本操作内容是,在个体码串中随机挑选两个逆
Pm
1 1 0110 1 变异1 1 011 0 1
2 遗传算法的模拟计算示例
下面解释用遗传算法求函数 的最大值的一些重要步骤 . 这里只介绍第一代群 体的生成过程与结果 .
(1)
编码
由于在该例中 , 因此将变量 编码为 5 位长的二进制形式 . 如 可表示为 .
(2)
初始群体的生成
随机产生初始群体的每个个体 , 群体的大小为 4 ( 如下表 ).
( )
2, 0,31
f x
x x
0,31
x
x
13
x 01101
个体号 初始
群体
的值 适应
度 选择
概率 适应 度期 望值
实际次数 配对 交叉
位置 新一 代群
体 的值
适应度
1 01101 13 169 0.14 0.58 1 2 4 01100 12 144
2 11000 24 576 0.49 1.97 2 1 4 11001 25 625
3 01000 8 64 0.06 0.22 0 4 4 11011 27 729
4 10011 19 361 0.31 1.23 1 3 4 10000 16 256
适应 度总 和
1170 1.00 4.00 4 1754
平均 293 0.25 1.00 1 439
x x
(3)
适应度计算
将每个个体 的函数值 作为该个体的适应度 . 如个体 01101 的适应度为 .
(4)
选择
计算每个个体的适应度所占的比例 , 并以 此作为相应的选择概率 . 表的第 5 列给出了每个个 体的选择概率 . 由此概率可计算出每个个体选择的 次数 . 也可采用轮盘赌方式来决定每个个体的选择 份数 . 赌轮按每个个体适应度的比例分配 , 转动赌轮 4 次 , 就可决定各自的选择份数 . 如表中第 7 列 . 结 果反映出 , 优秀个体 2 获得了最多的生存繁殖机会 , 最差个体 3 被淘汰 . 每次选择都对个体进行一次复 制 , 由此得到的 4 份复制送到配对库 , 以备配对繁 殖 .
x
f x( )
(13) 132 169
f
i j
f
f (5)
交叉与变异
这里采用简单交叉操作 : 首先对配对库中的个 体进行随机配对 ; 其次 , 在配对个体中随机设定 交叉处 , 配对个体彼此交换部分信息 ( 如表 ). 于 是得到 4 个新个体 , 这 4 个新个体就形成了新一 代群体 . 比较新旧群体 , 不难发现新群体中个体 适应度的平均值和最大值都有明显的提高 . 由此 可见 , 新群体中的个体的确是朝着期望的方向进
化了 . pm 0.001,
二 模拟退火算法
一、模拟退火算法简介
从物理学的有关知识知道,固体在恒定的温度下达 到热平衡的过程可以用 Monte Carlo 方法进行模拟 Monte Carlo 方法的算法简单,但必须大量采样才 能得到比较精确的结果因而计算量大。基于物理系 统在自由状态下有向能量较低状态转移的趋势,而 热运动又妨碍它准确落人最低状态的考
虑 ,Metropolis 于 1953 年提出对有重要贡献的状态 进行采样,从而较快地达到比较理想的结果,其方 法可以描述如下:
先给定以粒子相对位置表征的初始状态 ,作为 固体的当前状态,该状态的能量为 。然后用摄 动装置使随机选取的某个粒子的位移产生一微小 变化,得到一个新状态 ,新状态的能量是 。 如果 ,则该新状态就可作为“重要”状态,
如果 ,则考虑到热运动的影响,该新状态 是否为“重要” 状态需要根据固体处于该状态的概 率来判断。设固体处于状态 与状态 的概率比值 为 r , r 是一个小于 1 的数,用随机数产生器产生 一个 区间的随机数 。若 ,则新状
i j
E
iE
jj i
E j E i
E E
i j
r
0,1
若新状态 是重要状态 , 就 以取代 成为当前状态,
否则仍以 为当前状态,再重复以上新状态的产生过程,
在固体状态经过大量变换(常称之为迁移)后,系统趋于 能量较低的平衡状态。
上述接受新状态的准则称为 Metropolis 准则,相应的算法 称为 Metropolis 算法。研究表明一般情况下 Metropolis 算 法计算量明显少于 Monte Carlo 算法。
通过对固体退火过程的研究可知,高温状态下的物质降温 时其内能随之下降,如果降温过程充分缓慢,则在降温过 程中物质体系始终处于平衡状态。从而降到某一低温时其 内能可达最小,称这种降温为退火过程。模拟退火过程的 寻优方法称为模拟退火( Simulated anneating , SA )算 法。
j j i
i
(1)
模拟退火算法( SA )
设 为所有可能的组合状态, C : 为非负目标函数,即 ,反映了取状态 为解的代价,则组合优化问题可以形式地描述为 寻找 ,使
将状态 看成是某一物质体系的微观状态,而将 看成该物质体系在状态 下的能量,并用控
制参数 表示为让温度 从一个足够高的值慢慢 下降,对每一 用 Metropolis 采样法模拟该体系
1, , ,
2 k
S
S S
S S R i 0
C S Si
S* S
iS C S
S C
iS
min
*
Si
iC S Si
T
T
T
并以概率 接受 作为新的状态,
当这样的随机扰动重复的次数足够多后,系统 将达到该温度下的平衡状态,且服从
Boltzmann 分布。这里 b 即为 Boltzmann 常数
。
上述 Metropolis 采样过程与退火过程可通过下 列步骤来实现。
exp C bT S
( 2 )退火过程实现算法( AP )
1) 任选一初始状态 作为初始解 ,并设 初始温度为 ,令 ;
2) 令 ,以 和 调用 Metropolis 采样算法
,然后返回到当前解 ;
3) 按一定的方式将 降温,即另令 4) 检查退火过程是否结束,否则转到 2) ; 5) 以当前解 作为最优解输出。
S0
S 0 S
0T0 i 0
T T
iT S
iS S
i
T T T T
i1,
i1
T i ii, 1 ;
Si
( 3 ) Metropolis 采样算法( M 法)
用 AP 算法调用当前解 和 的过程如下:
1) 令 时的当前解为 ,而在温度 下 进行以下步骤;
2) 按某一规定方式根据当前解 所处的状态 , 产生一个邻近子集 ,由 随机产生一个新 的状态 以作为一个当前解的候选解,并计算
3) 若 ,则接受 作为下一个当前解;若 ,则按概率 接受 作为下一个
当前解;
4) 若 被接受,则令 。否则令
;
S T
0
k S
0 ST
S k S
N S k
N S k
S
C C S C S k
0
C 0
C
S
exp
C bT /
SS S k
1
S S k 1 S k( )5) 令 ,判断是否满足收敛准则,否则回到 2) ; 6) 将当前解 返回调用它的 AP 算法。
二、几种典型问题的模拟退火算法
模拟退火算法是依据 Metropolis 准则接受新解,因此除 接受优化解外,还在一个限定范围内接受劣解,这正是模 拟退火算法与局部搜索算法的本质区别。由于开始时较大
,可能接受一些较差的劣解。随着的减小,只能接受较好 的可行解。最后在趋于 0 时,就只接受较优的可行解了,
这就使模拟退火有可能从局部最优的“陷阱”中跳出来,从 而求得整体最优解。研究表明,对大多数组合优化问题而 言,模拟退火算法要优于局部搜索算法。下面仅对几个典
1 k k
S k
1
、货郎担问题( TSP )
设有 n 个城市和距离矩阵 D= ,其中 表示城 市 到城市 的距离,则问题是要找遍访每个城市 恰好一次的一条回路,且其路径长度为最短。
求解的模拟退火算法描述如下:
( 1 )解空间
解空间 可表为 的所有循环排列的集合,
即
其中每一个循环排列表示遍访 n 个城市的一条回 路,初始解可选为 。
dij diji
jS
1,2, ,n
k k k k k 为 ,, ,n 的循环排列
S 1, 2,, n | 1,, n 1 2
1, 2, , n
( 2 )目标函数
此时目标函数即为访问所有城市的路径长度或代价 函数的极小值,即
其中 。而一次迭代步骤由下列三步构成。
(3) 新解的产生
新解可通过分别或交替使用以下两种方法来产生。
1) 2 变换法 任选序号 。交换 与 之间的访 问顺序,此时新路径为(不妨设 ):
ni
k k
n d i i
k k
f
1
1
, ,
1min
1 1
k
n k
,
u v u v
u
v2) 3 变换法 任选序号 和 ,将 和 之间的 路径插到 之后访问,对应的新路径为(设 ):
( ** ) 在实际中经常将上述两种方法综合交替使用。
( 4 )代价函数差
相应于新解( * )和( ** )式的代价函数的差分别 满足:
( ) ☼
,
u v w
w u v
u v w
1 u 1 v 1 w
k
uk
v w 1 nk k k
k k
k
1 1 1 1 1 1
1 1
u v u v i i u u v v i i
n n
k k k k k k k k k k k k
i u i u
f d d d d d d
和
特别地,当问题对称即距离矩阵 D= 为对称矩 阵时,( )式可简化为: ☼
( 5 )接受准则
k ku 1 v 1 k kw u k kv w 1
k ku 1 u k kv v 1 k kw w 1
f d d d d d d
dij
k ku 1 v k ku v 1
k ku 1 u k kv v 1
f d d d d
否则 f/T),
exp(
0 f
,
p 0
2
、最大截问题( MCP )
给定带权图 ,权矩阵为 。要将 划分为子集 和 ,使 中所有顶点分属 和 的边的权之和最大。
模拟退火算法描述为:
( 1 )解空间 解空间可表示为集 的所有划分为 两个子集 和 的分划 Δ 的集合,即
其中分划 ( ; ),表示 顶点
的初始解选为 , 。
,G V E W
wijV
V V0
V0 V1 V1
V
V0 V1
| 为将 V 划分为 V
0和 V
1的一个分划
S
i j
i 1,2, , n j 0,1i j
v V
i 0 i 1,2, , n( 2 )目标函数 直接取分划所得到的截量 其中 ,需求其最大值。
( 3 )新解 任选一顶点 ,将其从目前子集移到 另一子集中去,即 。
( 4 )目标函数差 根据目标函数与产生新解的方法 可知,相应于新解的目标函数差为
( 5 )接受准则 由于 MCP 为最大优化问题,所以
uv,
f w
u v
u 1
u u V
v u uv v u uv
f w w
3
、 0/1 背包问题( ZKP )
给定一个可装质量 M 的背包及 n 件物品,物品 的质量和价值分别为 和 ,。要选若干件物品 装入背包,使其价值之和最大。
模拟退火算法可描述如下:
( 1 )解空间 0/1 背包问题是一个有约束的优化问 题,因此,限定解空间为所有可行解的集合,即
( 2 )目标函数 求下列函数的最大值:
s.t.
i w
ic
i
1,
2, , |
1 1 , 0 1,
x x x
nw x w
nx
nM x
iS
x x x
n c x c x c
nx
nf
1,
2, ,
1 1
2 2
0 1,
,
w x M x x
w
( 3 )新解的产生 随机选取物品 ,若 不在背包 中,则将其直接装入背包,或同时从背包中随机 取出另一件物品 ;若 已在背包中,则将其取出
,并同时随机装入另一物品 ,即 ,且
(或) 。
( 4 )背包价值差与质量差 价值差:
i i
j
i
j
x
i 1 x
ij
1 ,
jx x i j
装入 取出而
,将物品
取出 装入而
,将物品
直接装入 将物品
j i
c c
j i
c c
i c
f
i j
j i
i,
( 5 )接受准则
4
、独立集问题( ISP )
设图 , ,要找 的最大独立集
,使 且对任意的 时,必有 。
模拟退火算法的求解形式为:
0,
1, , 0
exp / ,
m m M
P m m M f
f T
其他
,G V E V
v v1, , ,
2
vn
VV1 V1 V u v V
,
1,
u v E
( 1 )解空间 取 为 的幂集 ,即 的所有子 集的集合 。注意到解空间中可能含 有不可行解,即可能存在 的子集 但并非独 立集,初始解为 。
如此构造解空间可以使得产生新解的方法简便,同时使算法可以从一个局部 最优的可行解变为不可行解,以增大逃脱局部最优“陷阱”的概率。
( 2 )目标函数 为“惩罚”可能出现的不可行解,将 目标函数选为
S V 2V V V1
1 1
2V |
S V V V
V V* S
V1
1 1f V
V
E
( 3 )新解的产生 通过任选顶点 ,当 时将其移出 。而当 时将其移入 ,即 其中 为集 的特征函数,定义为
( 4 )目标函数差 设 表示图 的邻接矩阵,
表示顶点 与 邻接,则伴随新解的目标函数差 为:
( 5 )接受准则
u V u V 1
V1 u V 1 V1 xV1
u 1 xV1
u1
x uV V1
1
1 1
( ) 0,
v
1,
x u u Vu V
ijA a G
vj
vi
ij 1 a
1
1
, 1
, 1
1 1
V u
a
V u
a f
V v
uv V v
uv