如何根据条件排名?

西韵竹西韵竹最佳答案最佳答案

这个问题有些年头了,不过最近刚好给公司解决了类似的问题,拿出来分享。 首先我们要解决两个问题,一个是“怎么排”,另一个是“怎么保证公正和公平性”。

一、怎么排 这里我们需要引入“熵”的概念来帮助我们做决策(其实这也是我们公司最终采用的方法); 熵是一个度量指标,用来衡量一个系统的无序程度;熵越大,说明系统越无序;反之则说明系统越有序。 举个例子帮助理解:有一堆苹果和一个橘子,这堆水果的熵是2个单位;如果现在把苹果都拿走,只剩下一个橘子,那么橘子的熵就是1个单位。

我们回到问题中来,怎么根据条件进行排位?其实就是求解当给定不同条件的值时所产生的熵的变化;比如有 a、b、c 三个人,身高分别是:a 165 b 175 c 180;体重分别是:a 50kg b 65kg c 75kg; 根据每个人的身高和体重得到各自的熵 H(a)=-\frac{1}{2}ln(2)\approx .3229H(b)=-\frac{1}{2}(ln(3/2))\approx .4214H(c)=-\frac{1}{2}\big(\ln(5/3)\big)\approx .8716 可以看出身体越协调的人其熵 H 就越小,身体越不协调的人 H 就越大。 现在我们来看根据不同的身体条件进行排位的情况:

情况一:只有身高一个变量 a 因为身高相同所以具有相同的熵 H; 情况二:只有体重一个变量 b 因为体重相同所以具有相同的熵 H; 情况三:身高和体重都考虑进 z=\sqrt{h} 由于 \sqrt{h} 的定义域为 [0,\infty) 所以只要 z 大于 0 就会产生负熵,即当身高和体重的综合数值大于 0 时会产生负熵。换句话说只要有 a+b 和 c 的值就会存在大于 0 的 z,产生负的H。 基于以上分析我们可以通过计算条件值的熵来对问题进行排序。

二、怎么保证公正和公平性 当一个问题可以解决“怎么排”之后,另外一个需要解决的问题就是“怎么保证结果的公正与公平”。因为人的主观意识会不可避免地带来判断上的偏差,为了消除这种偏见我们需要依靠算法的力量。

在这里我推荐使用遗传算法来解决公平性问题;因为遗传算法本身是一种模拟自然进化过程的算法,在解决约束优化问题时能够有效降低人为因素带来的偏差。 下面给出具体实现步骤:

① 初始化群体 设定遗传算法的参数并初始化一群解,这些解将组成后续的个体;

② 选择运算 按照一定规则从每个解中取出一部分构成新的解,作为下一步计算的输入;

③ 计算期望值 对每一个新解计算某个评价函数的值,这个函数可以用来表示问题的要求或目标;

④ 评价优劣 根据计算出来的期望值对整个群体进行排序,以供决策者参考。 整个流程的运行效率取决于第二步的选择运算,如果有比较好的方法能够确保在选择过程中避免重复或者是循环出现的情况就能够大幅提升运行效率。

在遗传算法中我们可以通过设置适应度来控制每个解被选中的概率,从而使得结果更倾向于我们所希望的方向。

我来回答
请发表正能量的言论,文明评论!