基于理想解决方案的评分结果
Scoring results based on an ideal solution
我正在搜索大量可能的结果,虽然我可能找不到完美的结果,但我想对各种结果进行评分,看看它们离理想有多近。 (我 认为 我在谈论某种加权评分,但如果我完全偏离基础,请不要让它影响你的答案。)
在某些情况下,我正在生成各种工作计划,并希望对每个结果进行评分,这样我就不必单独查看它们(这是一种蛮力方法,实际上有数十亿个的解决方案)来确定一个是否比其他任何一个更好或更差。
在输入方面,对于每个生成的时间表,我有一个 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]
正在将我的评论总结成答案。
所以您有一个 optimal/ideal/perfect 解决方案,并想将其他解决方案与它进行比较。在这种情况下,您可以计算(平方)误差的总和。如果你需要一个分数,你可以反转错误。
具体来说,您必须通过查看矩阵的每个条目并计算差值来计算解与最优解之间的(平方)差之和。将这些(平方)差异加起来,您会得到错误。
对于你给出的错误总和的例子如下:
E(Ideal, Not Ideal 1) = 1
E(Ideal, Not Ideal 2) = 3
误差平方和将得出以下结果:
SQE(Ideal, Not Ideal 1) = 1
SQE(Ideal, Not Ideal 2) = 5
通常使用误差平方和来惩罚较大的误差而不是几个小误差。
我正在搜索大量可能的结果,虽然我可能找不到完美的结果,但我想对各种结果进行评分,看看它们离理想有多近。 (我 认为 我在谈论某种加权评分,但如果我完全偏离基础,请不要让它影响你的答案。)
在某些情况下,我正在生成各种工作计划,并希望对每个结果进行评分,这样我就不必单独查看它们(这是一种蛮力方法,实际上有数十亿个的解决方案)来确定一个是否比其他任何一个更好或更差。
在输入方面,对于每个生成的时间表,我有一个 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]
正在将我的评论总结成答案。
所以您有一个 optimal/ideal/perfect 解决方案,并想将其他解决方案与它进行比较。在这种情况下,您可以计算(平方)误差的总和。如果你需要一个分数,你可以反转错误。
具体来说,您必须通过查看矩阵的每个条目并计算差值来计算解与最优解之间的(平方)差之和。将这些(平方)差异加起来,您会得到错误。
对于你给出的错误总和的例子如下:
E(Ideal, Not Ideal 1) = 1
E(Ideal, Not Ideal 2) = 3
误差平方和将得出以下结果:
SQE(Ideal, Not Ideal 1) = 1
SQE(Ideal, Not Ideal 2) = 5
通常使用误差平方和来惩罚较大的误差而不是几个小误差。