让我们把这个问题称为Slinger-Bird问题(实际上Slinger类似于服务器和鸟类的请求,但我正在思考它,所以我改变它们希望得到不同的观点!).
>有S石投掷者(slingers)和B鸟.
> slingers不在彼此的范围内.
>投掷一次可以杀死所有鸟类在一个抛油者的视线内,并将消耗一次和一次单位
我试图找出最佳解决方案,最大限度地减少了鸟类特定到达模式下杀死鸟类所需的时间和射击次数.让我举一个绝对数字的例子:3个Slingers和4个鸟.
Time 1 2 3 4 5
Slinger
S1 B1, B2 B1, B2, B3 B4
S2 B1 B1, B2 B3,B4
S3 B1 B3, B4 B1,B2,B3,B4
我的数据看起来像这样:
>> print t
[
{
1: {S1: [B1, B2], S2: [], S3: [B1]},
2: {S1: [B1, B2, B3], S2: [B1], S3: [B3, B4]},
3: {S1: [B4], S2: [B1,B2], S3: []},
4: {S1: [], S2: [B3, B4], S3: [B1, B2, B3, B4]}
}
]
我能想到的解决方案有很多(S = t = k意味着抛物线Sx在时间k拍摄):
> t = 1时的S1,t = 2时的S1,t = 3时的S1< - 成本:3次3次单位= 6
> t = 2时的S1,t = 3时的S1< - 成本:2次3个时间单位= 5
> t = 1时的S1,t = 2时的S3< - 成本:2次2次单位= 4
> t = 4时的S3< - 成本:1次射击4次单位= 5
对我而言,解决方案3似乎是最佳解决方案.当然,我是手工完成的(因此有可能我错过了一些东西)但我想不出这种可扩展的方式.此外,我担心有一些角落案件,因为一个射手的决定可能会改变他人的决定,但因为我有全球观点,可能无关紧要.
在python中解决这个问题的快速而好的方法是什么?我很难想出一个好的数据结构来做到这一点,不用单独算法来做到这一点.我正在考虑使用动态编程,因为这似乎涉及状态空间探索,但对如何继续进行有点困惑.有什么建议?