由於 Open-Match 在架构上,允许使用同一张 ticket,对不同的配对池进行搜寻与配对,这便是先前提到的 overlapping MatchProfiles,但如何使这些具有重叠性的匹配,最後只产生出一个最适合的匹配结果,则需要 Evaluator 介入参与。
基於配对方式的设计,可以决定我们的 Evaluator 如何参与我们的配对流程,可以简单地分成三种使用方式:
无重叠
:将 MatchProfiles 使用的条件完全不重叠,使你的配对永远不会发生重叠冲突,如此一来可以仅靠 default evaluator 处理配对有重叠(单一指标)
:MatchProfiles 使用含有重叠的条件范围,但有计算出分数指标,并且放入 Extensions["evaluation_input"]
中,default evaluator 可以依据此指标进行匹配判断,避免配对冲突有重叠(多指标)
:MatchProfiles 使用含有重叠的条件范围,且计算出多个评分指标,在这样的情况下,需要重新建立客制化的 Evaluator,针对计算出来的多个指标做评分与指派这边看了一下 source code,粗浅的解析一下预设的 Evaluator 是怎麽运作的。
func evaluate(ctx context.Context, in <-chan *pb.Match, out chan<- string) error {
matches := make([]*matchInp, 0)
nilEvaluationInputs := 0
for m := range in {
//如同范例使用的 DefaultEvaluationCriteria 将计算分数放 Score
inp := &pb.DefaultEvaluationCriteria{
Score: math.Inf(-1),
}
//指定 Extensions key "evaluation_input"
if a, ok := m.Extensions["evaluation_input"]; ok {
err := ptypes.UnmarshalAny(a, inp)
if err != nil {
logger.WithFields(logrus.Fields{
"match_id": m.MatchId,
"error": err,
}).Error("Failed to unmarshal match's DefaultEvaluationCriteria. Rejecting match.")
continue
}
} else {
nilEvaluationInputs++
}
matches = append(matches, &matchInp{
match: m,
inp: inp,
})
}
if nilEvaluationInputs > 0 {
logger.WithFields(logrus.Fields{
"count": nilEvaluationInputs,
}).Info("Some matches don't have the optional field evaluation_input set.")
}
//分数排序
sort.Sort(byScore(matches))
//避免冲突
d := decollider{
ticketsUsed: make(map[string]*collidingMatch),
backfillsUsed: make(map[string]*collidingMatch),
}
for _, m := range matches {
d.maybeAdd(m)
}
stats.Record(context.Background(), collidedMatchesPerEvaluate.M(int64(len(matches)-len(d.resultIDs))))
//结果
for _, id := range d.resultIDs {
out <- id
}
return nil
}
>>: day 4 I'm your father, coroutine父子继承关系
上次优先顺序还没讲,今天就来讲解一下 数学的运算符号有优先顺序的差别,JAVA也有 数学符号无疑是加...
View Animation可以对view做透明度、缩放、平移、旋转等动画。 xml动画文件需再re...
clear 清除浮动 浮动元素顾名思义就是浮动在版面之上,所以如果接着顺序往下写的程序码没有使用cl...
注:发文日和截图的日期不一定是同一天,所以价格计算上和当日不同,是很正常的。 声明:这一系列文章并无...
此系列文章会同步发文到个人部落格,有兴趣的读者可以前往观看喔。 今天要带大家完成第一个测试脚本,这...