Arrays 组合两个数组,其中结果和尽可能接近

Arrays 组合两个数组,其中结果和尽可能接近,arrays,algorithm,sorting,filter,equality,Arrays,Algorithm,Sorting,Filter,Equality,我希望有人能帮我解决这个问题,或者给我指出正确的方向。我要做的是,当从数组2中只取1个值并将它们相加时,使数组1中的所有值尽可能相等。数组1比数组2短得多。我将在下面举一个例子,用我正在使用的一些实数 例如: array1=[458.6458.5458.4457.1455]和array2=[5.6,5.6,5.7,5.8,5.9,5.9,5.9,6,6.1,6.1,6.2,6.2] 如果我将array1[0]和array2[0]加在一起,这将等于464.2 如果我通过array1和array2

我希望有人能帮我解决这个问题,或者给我指出正确的方向。我要做的是,当从数组2中只取1个值并将它们相加时,使数组1中的所有值尽可能相等。数组1比数组2短得多。我将在下面举一个例子,用我正在使用的一些实数


例如:

array1=[458.6458.5458.4457.1455]
array2=[5.6,5.6,5.7,5.8,5.9,5.9,5.9,6,6.1,6.1,6.2,6.2]

如果我将
array1[0]
array2[0]
加在一起,这将等于464.2

如果我通过
array1
array2
继续这样做,那么生成的数组将是
[464.2464.1464.1462.9460.9]

您可以看到数组中的前3个数字彼此非常接近,仅相差0.1,但最后几个数字相差更大


然而,如果它知道使用“array2”末尾的数字,那么结果数组中的最后两个值将更接近前3个值

这就是我陷入困境的地方,我不知道如何继续。我知道这很难,因为每次运行代码时,值都可能不同,并且没有一个设置值可供查找。它只是开始以一种模式出现


感谢您的时间,非常感谢您提供的任何帮助。

我的第一个想法是贪婪算法,但这也可能适用于一些随机优化算法,例如遗传算法、进化策略或简单的爬山。下面是一个非常简单的Python示例:

随机导入
def分数(a1、a2):
#平均值的平方误差之和
a3=[a+b代表a,b在zip中(a1,a2)]
s=总和(a3)/长度(a3)
回报总额(abs(s-x)**2代表a3中的x)
def opt(a1、a2):
cur=列表(a2)
对于范围(1000)内的i:
新建=列表(cur)
#随机突变
a、 b=random.randrange(len(cur)),random.randrange(len(cur))
新[a],新[b]=新[b],新[a]
#优于当前->保持
如果分数(a1,新)<分数(a1,当前):
cur=新
返回电流[:len(a1)]
这里,
cur
是当前的解决方案,它只是
array2
中元素(包括那些不需要的元素)的排列,这些元素被随机交换,如果“分数”更好,结果将被保留

对于您的示例数据,这始终会产生这样的结果,虽然看起来不太好,但实际上似乎与得到的结果一样好

result: [5.6, 5.6, 5.7, 6.2, 6.2]
sums:   [464.2 464.1, 464.1 463.3, 461.2]

如果这似乎可行,则可以进一步改进算法,例如,保留多个父代,或每代创建更多子代,确保交换中至少有一个元素实际相关,缓存当前最佳分数,或者允许一行中有多个突变。

两个数组中的值是否总是相对接近,如您的示例中所示,或者array2可能是,例如,
[5.2,132.3,-6,…]
?既然您提到缺少目标值,您是否尝试过使用
平均值(array1)+平均值(array2)
作为目标?@tobias_k他们已经很接近了。这些实际上是实际值,但在示例中缩短了。在我的实际问题中,我在
array1
中有12项,在
array2
中有140项。此外,它们也将像示例中一样接近,并且它们永远不会是负面的。这些数字实际上是现实世界中项目粒度的权重。这可能也适用于一些简单的随机优化算法(ES、GA等)。非常感谢!这太棒了。就像你说的,它可以进一步改进,但这让我朝着正确的方向前进,非常接近完美。再次感谢你!