Algorithm 找到覆盖区域最小点数的算法(战争游戏)

Algorithm 找到覆盖区域最小点数的算法(战争游戏),algorithm,greedy,Algorithm,Greedy,我在处理一场战争游戏。我有一个我的基地列表B(x,y),从中我可以向敌人发起攻击(他们在我自己的基地之间有基地)。每个基地B都可以在R范围内攻击(所有基地的半径相同)。我怎样才能找到我的基地来攻击尽可能多的敌人基地,但使用我的基地数量最少 我已经将问题简化为寻找覆盖最大区域所需的最小基地数量(及其坐标)。我想知道是否有比研究所有可能的组合更好的方法,因为碱基的数量可能达到数千个 示例:如果攻击半径为10,并且我在一个正方形及其中心有五个底:(0,0),(10,0),(10,10),(0,10),

我在处理一场战争游戏。我有一个我的基地列表
B(x,y)
,从中我可以向敌人发起攻击(他们在我自己的基地之间有基地)。每个基地
B
都可以在
R
范围内攻击(所有基地的半径相同)。我怎样才能找到我的基地来攻击尽可能多的敌人基地,但使用我的基地数量最少

我已经将问题简化为寻找覆盖最大区域所需的最小基地数量(及其坐标)。我想知道是否有比研究所有可能的组合更好的方法,因为碱基的数量可能达到数千个

示例:如果攻击半径为10,并且我在一个正方形及其中心有五个底:
(0,0)
(10,0)
(10,10)
(0,10)
(5,5)
,那么答案是只需要前四个,因为中心一个所覆盖的所有区域都已经被其他区域覆盖

注1解决方案必须为单线程


注2如果这意味着速度大幅提高,那么解决方案并不一定是完美的。基地数量达到数千个,这需要尽可能少的时间。我认为在Python的10000个基地的运行时间超过100毫秒在一台现代计算机上是不可接受的,所以我想也许我可以从消除明显的东西开始,就像在代码< R/10/< /代码>彼此之间有多个碱基一样,简单地除一个之外(除此之外)。.

哼解决方案取决于您的需要。若你们需要实时的答案,也许贪婪算法可以提供很好的解决方案。 另一种解决方案可能是使用带有约束时间()的元启发式。我可能会使用遗传算法在有限的时间内寻找这个问题的解决方案

如果有兴趣,我可以提供一个Python实现的玩具示例

编辑:

当您必须快速提供解决方案时,贪婪算法通常更好。但你的情况我怀疑。许多贪婪算法的特殊性在于,每次尝试计算新结果时,都需要从头开始

再次谈到遗传算法,例如,每次你必须做出决定时,都可以从最后的结果重新开始搜索过程。事实上,你可能会让他有一个子过程,每100毫秒取上一个循环中计算出的更好的解


如果在计算资源方面不太贪婪,那么从长远来看,该解决方案将比贪婪解决方案提供更好的结果,因为该解决方案可能需要适应情况的变化,但许多元素将保持不变。请注意,使用贪婪算法的解决方案初始化元搜索无论如何都是一个好主意

哼解决方案取决于您的需要。若你们需要实时的答案,也许贪婪算法可以提供很好的解决方案。 另一种解决方案可能是使用带有约束时间()的元启发式。我可能会使用遗传算法在有限的时间内寻找这个问题的解决方案

如果有兴趣,我可以提供一个Python实现的玩具示例

编辑:

当您必须快速提供解决方案时,贪婪算法通常更好。但你的情况我怀疑。许多贪婪算法的特殊性在于,每次尝试计算新结果时,都需要从头开始

再次谈到遗传算法,例如,每次你必须做出决定时,都可以从最后的结果重新开始搜索过程。事实上,你可能会让他有一个子过程,每100毫秒取上一个循环中计算出的更好的解


如果在计算资源方面不太贪婪,那么从长远来看,该解决方案将比贪婪解决方案提供更好的结果,因为该解决方案可能需要适应情况的变化,但许多元素将保持不变。请注意,使用贪婪算法的解决方案初始化元搜索无论如何都是一个好主意

哼解决方案取决于您的需要。若你们需要实时的答案,也许贪婪算法可以提供很好的解决方案。 另一种解决方案可能是使用带有约束时间()的元启发式。我可能会使用遗传算法在有限的时间内寻找这个问题的解决方案

如果有兴趣,我可以提供一个Python实现的玩具示例

编辑:

当您必须快速提供解决方案时,贪婪算法通常更好。但你的情况我怀疑。许多贪婪算法的特殊性在于,每次尝试计算新结果时,都需要从头开始

再次谈到遗传算法,例如,每次你必须做出决定时,都可以从最后的结果重新开始搜索过程。事实上,你可能会让他有一个子过程,每100毫秒取上一个循环中计算出的更好的解


如果在计算资源方面不太贪婪,那么从长远来看,该解决方案将比贪婪解决方案提供更好的结果,因为该解决方案可能需要适应情况的变化,但许多元素将保持不变。请注意,使用贪婪算法的解决方案初始化元搜索无论如何都是一个好主意

哼解决方案取决于您的需要。若你们需要实时的答案,也许贪婪算法可以提供很好的解决方案。 另一种解决方案可能是使用带有约束时间()的元启发式。我可能会使用遗传算法在有限的时间内寻找这个问题的解决方案

如果有兴趣,我可以提供一个Python实现的玩具示例

编辑:

当您必须快速提供解决方案时,贪婪算法通常更好。但你的情况我怀疑。许多贪婪算法的特殊性在于每次尝试时都需要从头开始