Skip to content

优化方案

本系统提供了退火优化引擎用于优化输入方案。但在优化之前,我们需要先理解一些基本概念。

如前所述,在方案中每个元素的安排可以是键位(包括引用)或归并。我们将全部元素对应的全部安排合起来称为一个「决策」。决策代表了我们方案设计的一种可能性,但方案还可能具有其他的可能性,例如乱序方案中每个元素可以在一定范围内任意布局。用于表达方案设计的全部可能性的概念就是「决策空间」。

为单个元素设计备选安排列表​

Section titled “为单个元素设计备选安排列表​”

假设我们为「米十五笔」方案设计决策空间。例如对于「口」字根,它当前是按照形似原则放置在 o 键上;另外由于方案也有很多字根是根据音托来安排的,所以它也可以放在 k 键上;再另外也可以根据形似放置在 d 键上(形似大写 D)。因此,我们在当前安排的下方添加这几个不同的安排,以便系统在优化过程中选择。 另外值得注意的是,在上面的备选安排列表中每个安排有一个打分。打分表明了这个安排对于方案学习难度增加的成本,越不好或者不合理的安排打分越高,例如这里放置在 d 键上就比 k 键上更难记忆,因此 k 键是 0 分而 d 键是 1 分。

如同当前安排一样,备选安排也可以是「键位」或者「归并」。另外,备选安排也可以是「禁用」,即删除这个元素。「禁用」仅限于字根类元素(即动态选根),而且需要针对优化算法进行二次开发才能使用,因此暂时不介绍。

有时候我们可能会希望一个元素的安排取决于另一个元素。例如想表达「只有当「未」在 w 键时,「末」才能在 m 键」,此时就可以用「添加条件」的功能来实现。条件可以添加多个。 值得注意的是,条件安排表达的是必要条件而不是充分条件。也就是说,只有条件满足的时候,该元素能采取该安排;而不是只要条件满足的时候,该元素必须采取该安排。

如果一个元素的当前决策不需要任何条件,而且打分为 0,则可以在决策空间中省略;如果是有条件的或需要非零的打分,则需要在决策空间中再写一遍。

如果一个元素的可行安排有很多,例如可以安排在 a-z 的 26 个字母键位上,则显然逐一枚举是比较麻烦的。为此,可以先定义一个变量,来描述这种安排的可能性集合,然后再把变量指派给具体的元素。点击「决策空间」下面的「变量」功能,可以创建变量,指定一个名称并限定该变量可以变化的范围: 然后,就可以在备选安排中直接使用这个变量:

对于纯乱序方案来说,即使有了变量,为每个元素指定一遍变量仍然比较麻烦。这里提供了一个生成器功能,可以给多个元素批量加入备选的安排。当然,如果元素的数量不是特别多的话,建议还是每个元素分别设置,这样自由度较高。 上面是生成器的配置界面,其中每个规则由一个正则表达式(用于匹配元素)和一个带条件的安排构成。其含义为:如果元素匹配了这个正则表达式,那么就给这个元素的备选安排列表中加入这个安排。图中的规则含义为:如果元素是单个字符(在自动拆分系统中,字根和笔画必然是单个字符,而其他元素必然不是单个字符),那么就为它加上一个包含所有按键的变量安排。

对于带有字音元素且需要处理不同按键集合的方案来说,这种生成器显得非常方便。例如,对于双拼双形的二码顶方案(声韵形形),其声母位于大集合上、韵母位于全集合上、字根笔画位于小集合上。此时使用 ^声母-, ^韵母-, ^.$ 就可以分别匹配到声母、韵母和字根笔画并添加相应的规则。

有的情况下,我们想批量加入的安排会和原有的安排有关系。例如,在虎码这样的字根双编码、第一码乱序、第二码音托的方案中,批量加入的安排需要保证第二码和原来一样。这个逻辑可以用「占位符」来表达,例如下图: 表示为所有字根和笔画增加安排,其中第一码可以是所有按键,第二码和现有的安排相同。

性能指标分为四个模块,分别针对一字词全码、一字词简码、多字词全码、多字词简码,以下以一字词全码为例来讲解。

整体指标包括加权选重、分布偏差、速度当量和指法。建议的比例为:固定加权选重为 1.0,而分布偏差、速度当量、指法在 0.01 量级。

码长指标表达了对于编码效率的追求。例如,如果希望降低四码定长方案中四键字的比例(也就等价于提高一级简码、二级简码的比例),则可以如下设置:

码长指标建议在 0.1 量级。

层级指标表达了在一定范围内的不加权选重和码长性能。例如,要降低全部字集内的不加权选重数,并着重降低前 3000 字中的不加权选重数,可以这样设置: 层级指标也可以携带自己的码长指标,例如可以控制「前 500 中的三键字数量」。

正则化强度是指在决策空间中指定的打分以多少的系数加到最终的目标函数上。例如,如果正则化强度是 0.01,且在决策中有一个元素的安排打分为 1.0、另一个为 2.0,其余都为 0.0,则最终对目标函数的总贡献为:

0.01 * (1.0 + 2.0) = 0.03

在退火算法的运行过程中,算法在决策空间中随机移动,有时让方案变好,但也有时让方案变差。「温度」这个参数表达了算法有多大概率接受一个比较差的解,一般在一开始运行的时候采取高温让算法充分探索决策空间;而在运行结束的时候降到低温以让结果收敛。因此,对于退火算法来说要设置最高温、最低温和降温的步数。这些参数可以让系统来自动探索,也可以手动设置。一般来说,推荐的设置方法是:最高温应该和目标函数的总大小在一个数量级;最低温应该比最高温低至少四个数量级;步数越多越好。