【问题标题】:Scoring results based on an ideal solution基于理想解决方案的评分结果
【发布时间】:2018-01-12 16:27:51
【问题描述】:

我正在搜索大量可能的结果,虽然我可能找不到完美的结果,但我想对各种结果进行评分,看看它们与理想的接近程度。 (我认为我说的是某种加权评分,但不要让它影响你的答案,以防我完全偏离基础。)

在某些情况下,我正在生成各种工作时间表,并希望对每个结果进行评分,这样我就不必单独查看它们(这是一种蛮力方法,实际上有数十亿个解决方案) 来确定一个比其他任何一个更好还是更差。

在输入方面,对于每个生成的时间表,我有一个 3x14 数组,其中包含计划在任何给定日期每个班次工作的总人数(即,对于两周内的每一天,人的工作日、波动和中途)。

到目前为止,我已经尝试过:

A) 对每一行中的值求和,然后将每个总和(行)乘以权重(例如,第 0 行总和 * 1、第 1 行总和 * 2、第 2 行总和 * 3 等),最后相加加权和

function calcScore(a)
    dim iCol, iTotalD, iTotalM, iTotalS

    for iCol = 0 to 13
        iTotalD = iTotalD + a(0)(iCol)
        iTotalS = iTotalS + a(1)(iCol)
        iTotalM = iTotalM + a(2)(iCol)
    next

    calcScore = iTotalD + iTotalS * 2 + iTotalM * 3
end function

B) 将每行中的每个值乘以权重(例如,第 0(0) * 1 行、第 0(1) * 2 行、第 0(2) * 3 行等),然后对加权值求和每一行

function calcScore(a)
    dim iCol, iTotalD, iTotalM, iTotalS

    for iCol = 0 to 13
        iTotalD = iTotalD + a(0)(iCol) * (iCol + 1)
        iTotalS = iTotalS + a(1)(iCol) * (iCol + 1)
        iTotalM = iTotalM + a(2)(iCol) * (iCol + 1)
    next

    calcScore = iTotalD + iTotalS + iTotalM
end function

以下是一些示例输入(时间表),包括理想和非理想。请注意,在我的理想示例中,每一行都是相同的(例如,所有 4 或所有 3),但在实际使用中不一定是这种情况。我的计划是给我的理想时间表打分,然后将其他时间表的分数与之比较。

 Ideal:
        Su Mo Tu We ...
   Day: 4  4  4  4  ...
 Swing: 3  3  3  3  ...
   Mid: 2  2  2  2  ...

 Not Ideal:
        Su Mo Tu We ...
   Day: 3  4  4  4  [D(0) is not 4]
 Swing: 3  3  3  3
   Mid: 2  2  2  2

 Not Ideal:
        Su Mo Tu We ...
   Day:  4  4  4  4
 Swing:  3  3  4  3  [S(2) is not 3]
   Mid:  0  2  2  2  [M(0) is not 2]

【问题讨论】:

  • 不确定我的理解是否正确,但您似乎有一个最佳/理想/完美的解决方案,并想与其他解决方案进行比较。如果是这种情况,您可以计算(可能是平方)误差的总和。如果你需要一个分数,你可以反转错误。
  • 不,该站点计算均方误差的总和。我的意思是您只需计算解决方案与最佳解决方案之间的平方差之和。因此,您基本上查看矩阵的每个条目并计算差异。将这些平方差相加,您就会得到错误。如果你愿意,你不必使用平方。
  • 如果它可能是平方的,也可能不是平方的,做一个与做另一个的论据是什么?
  • 这取决于您要如何处理错误。例如,您是否要将一个错误 2 等同于两个错误 1?然后省略正方形。通常,您希望避免较大的误差,在这种情况下人们经常使用平方误差。

标签: algorithm schedule


【解决方案1】:

将我的 cmets 总结为答案。

因此,您有一个最佳/理想/完美的解决方案,并希望与其他解决方案进行比较。在这种情况下,您可以例如计算(平方)误差的总和。如果您需要分数,您可以反转错误。

具体来说,您必须通过查看矩阵的每个条目并计算差异来计算解决方案与最优解决方案之间的(平方)差异之和。将这些(平方的)差异加起来就会得到错误。

对于你给出的错误总和的例子如下:

E(Ideal, Not Ideal 1) = 1
E(Ideal, Not Ideal 2) = 3

误差平方和将产生以下结果:

SQE(Ideal, Not Ideal 1) = 1
SQE(Ideal, Not Ideal 2) = 5

通常,使用平方误差之和是为了惩罚较大的错误而不是几个小错误。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-16
    • 2011-06-01
    • 1970-01-01
    相关资源
    最近更新 更多