【发布时间】: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?然后省略正方形。通常,您希望避免较大的误差,在这种情况下人们经常使用平方误差。