Algorithm 匈牙利环拼图
我很难为匈牙利环难题找到一个可接受的启发式方法。我计划用IDA*算法来解决这个问题,我正在用Visual Basic编写程序。我所缺少的只是如何实际解决这个难题。我已经将左环和右环实现到它们自己的数组中,并具有顺时针和逆时针旋转每个环的函数。我不是要代码,只是想找个地方开始 以下是2个环形阵列:Algorithm 匈牙利环拼图,algorithm,vb6,heuristics,Algorithm,Vb6,Heuristics,我很难为匈牙利环难题找到一个可接受的启发式方法。我计划用IDA*算法来解决这个问题,我正在用Visual Basic编写程序。我所缺少的只是如何实际解决这个难题。我已经将左环和右环实现到它们自己的数组中,并具有顺时针和逆时针旋转每个环的函数。我不是要代码,只是想找个地方开始 以下是2个环形阵列: Dim leftRing(19) As Integer ' leftRing(16) is bottom intersection and leftRing(19) is top intersecti
Dim leftRing(19) As Integer
' leftRing(16) is bottom intersection and leftRing(19) is top intersection
Dim rightRing(19) As Integer
' rightRing(4) is top intersection and rightRing(19) is bottom intersection
在数组中,我将以下内容存储为每种颜色的值:
红色值=1黄色=2蓝色=3和黑色=4我建议分别计算每个环中的“错误”-需要更换多少个球才能解决环(9色1个,10色1个,9色1个单独的球)。最多可以使用一个旋转固定两个球,然后需要另一个旋转来固定另外两个球。分别计算每个环的距离=2n-1,其中n是坏位置数量的一半,取其中较大的一个。在寻找错误最少的位置时,可以迭代所有二十个位置,但是我认为有更好的方法来计算这个度量(除了简单的修剪)
更新:
与Gareth Reed的讨论指出了以下启发:
对于每个环,分别计算:
这应该避免所有较大的局部极小值。给我们展示一些工作。你说你想使用这个算法——你找到了它的部分伪代码了吗?展示“我已经将左环和右环都实现到了它们自己的数组中”的代码,这样回答起来就容易多了。你确定VB6吗?VS201x Express是免费下载的。主要问题是不知道从何处开始为程序制作启发式。如果我能得到一个起点,我可以从那里开始。我所拥有的只是一个基本的想法,如何解决一个难题不使用任何启发式。基本上把10个红色的球分成左环,然后把10个黑色的球分成右环,混合搭配黄色和蓝色,直到它们的顺序正确。给我们展示一些作品。你说你想使用这个算法——你找到了它的部分伪代码了吗?展示“我已经将左环和右环都实现到了它们自己的数组中”的代码,这样回答起来就容易多了。你确定VB6吗?VS201x Express是免费下载的。主要问题是不知道从何处开始为程序制作启发式。如果我能得到一个起点,我可以从那里开始。我所拥有的只是一个基本的想法,如何解决一个难题不使用任何启发式。基本上把10个红色分开