把自己的需求又重新看了一下,首先 感谢下那位默默按顶的园友,不管怎样是他给了我 把(下)
写了的决心。因为由于以下原因,我没有完全实现(上)中的需求。
1.本人 较笨 短时间内 没想出 方法
2.这个模块的 效果重点是规则 参数的动态设定,因为不同的case 同一个规则的标准可能不一样
3.出于综合 考虑,只能妥协了一部分需求,你可以理解为我的借口,也可以理解为身不由己。
正文:
order_set 里 存了所有的order种类
opposite_dict里存储了所有互相矛盾的 order关系对
扫描了每条规则都会生成一个order_dict,例如:
order_dict={'rise_percent':0.1,'drop_percent':0.1,'level':2,'reason':'low power'}
所有的order_dict都存到 rule_result这个list里。
将rule_result里的规则 按照 level从低到高 排序 这么做的好处是,可以让低可信度的冲突,先抵消掉,然后在考虑高可信度的冲突
原本的需求是,高可信度的order有冲突,那么就由低可信度的决定。
现在是高可信度order冲突,这一对冲突order就无效
同时 同类型的order,高可信度的 要替代低可信度的
不同规则 产生的order reason不一样,通过这个 区分 是否是同一个规则 产生的order
好了 大致思想就是这样了
部分代码(python):
1 def __summary(self): 2 """ 3 总结规则 4 """ 5 self.order_dict = {} 6 order_set = set(['rise_percent', 'drop_percent', 'grad_percent', 'delete_percent']) 7 opposite_dict = {'rise_percent':'drop_percent', 'drop_percent':'rise_percent', \ 8 'grad_percent':'delete_percent', 'delete_percent':'grad_percent'} 9 #按level从小到大排序 10 self.rule_result.sort(key = lambda x:x['level']) 11 for rule in self.rule_result: 12 keys = order_set.intersection(set(rule.keys())) 13 for key in keys: 14 level = key + '_level' 15 reason = key + '_reason' 16 opp_key = opposite_dict[key] 17 opp_level = opp_key + '_level' 18 opp_reason = opp_key + '_reason' 19 20 if self.order_dict.has_key(key): 21 if rule['level'] > self.order_dict[level]: 22 if self.order_dict.has_key(opp_key) and self.order_dict[reason] != self.order_dict[opp_reason]: 23 if rule['level'] == self.order_dict[opp_level]: 24 del self.order_dict[opp_key] 25 del self.order_dict[opp_level] 26 del self.order_dict[opp_reason] 27 continue 28 self.order_dict[key] = rule[key] 29 self.order_dict[level] = rule['level'] 30 self.order_dict[reason] = rule['reason'] 31 else: 32 self.order_dict[key] = rule[key] 33 self.order_dict[level] = rule['level'] 34 self.order_dict[reason] = rule['reason']
如果你有更好的想法,
也欢迎你与我讨论,有讨论 才有进步
好,先这样了