只是试图找到一个好的算法来使用典型的RPS规则找到最佳解决方案。我还没有开始编程这个问题。
给定两个有序数组,每个数组包含N个元素,通过重新排序第一个数组来优化获胜次数。
例如:
a[0] = rock
a[1] = paper
a[2] = paper
a[3] = rock
b[0] = paper
b[1] = rock
b[2] = scissors
b[3] = rock
// currently
a[0] vs b[0] = -1 // (rock losses to paper)
a[1] vs b[1] = +1 // (paper beats rock)
a[2] vs b[2] = -1 // (paper losses to scissors)
a[3] vs b[3] = 0 // (rock ties to rock)
应返回的最佳订单是{1,0,3,2}
paper ties paper
rock ties rock
rock beats scissors
paper beats rock
问题是,我如何得出这个结果?一些限制。
比起胜负相互抵消更为可取。这可能是通过权衡损失而不是胜利来实现的。即。
a[0] = rock
a[1] = paper
b[0] = paper
b[1] = rock
{0, 1} vs b[..] = -1, +.95 = -.05
{1, 0} vs b[..] = 0, 0 = 0 // preferred order
此外,首选阵列底部的胜利。
有关如何完成此任务的任何建议?感谢。
答案 0 :(得分:3)
对于小型数组,您可以解决https://en.wikipedia.org/wiki/Assignment_problem。
对于大型数组,请注意您可以通过给出3x3计数数组中的条目来准确描述任何解决方案,其中A [i,j]给出玩家A所说的次数(0 => rock,1 = >纸,2 =>剪刀)和B表示(0 =>岩石,1 =>纸,2 =>剪刀)。所以你想要填充这个数组来最大化A的胜利的单元格的总和,受到总和向下列的限制,这相当于B表示阵列中的岩石,纸张和剪刀的次数和同样沿着A行 - 这个结果告诉你足够填写A给定B的数组。
你当然可以用整数线性规划来解决这个问题。我怀疑问题总是在一个角落,如果你用线性编程解决它只是将每个条目约束为> = 0你将得到一个整数答案,但我还没有正式证明这一点。