我正在寻找大量可能的结果,虽然我可能找不到完美的结果,但我想对各种结果进行评分,看看它们与理想结果有多接近。 (我想想我在谈论某种加权评分,但是如果我完全偏离基础,不要让这影响你的答案。)
对于某些情况,我正在制作各种工作时间表,并希望得到每个结果,以便我不必单独查看它们(这是一种蛮力的方法,并且有数十亿的解决方案)确定一个人是否比任何一个更好或更差。
输入方面,对于每个生成的时间表,我有一个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]
答案 0 :(得分:0)
将我的评论总结为答案。
因此,您拥有最佳/理想/完美的解决方案,并希望与其他解决方案进行比较。在这种情况下,您可以计算(平方)误差的总和。如果您需要分数,可以反转错误。
具体而言,您必须通过查看矩阵的每个条目并计算差异来计算解与最优之间的(平方)差的总和。将这些(平方)差异相加并得出错误。
对于您给出的错误总和的示例如下:
E(Ideal, Not Ideal 1) = 1
E(Ideal, Not Ideal 2) = 3
平方误差的总和将产生以下结果:
SQE(Ideal, Not Ideal 1) = 1
SQE(Ideal, Not Ideal 2) = 5
通常,使用平方误差之和来处理较大的错误而不是几个小错误。