压缩数学图

时间:2009-09-26 19:11:08

标签: math graph mathematical-optimization

我想绘制一个类似这样的图形: alt text http://img25.imageshack.us/img25/9786/problemo.png

你可以看到3个:a,b& C。如何更改元素(1,2,3 ...,9)的位置以使路径尽可能短?我的意思是这条线应该尽可能短。

我对它非常感兴趣,因为我正在绘制一个带有问题的图表,某种类似的信息图表,如“按照线条来了解答案”。我知道它有点关于图论...所以如果它太难了,你知道是否有任何程序用于压缩这样的东西?

例如,程序应该像这样工作: 在输入中它应该得到3个

a='1,5,7,8,4,2,6'
b='4,2,3,6,9,8,5'
c='7,9'

在输出中应该是这些元素的坐标。

1 个答案:

答案 0 :(得分:3)

每当我遇到难以解决的优化问题时,我会想到genetic algorithms。我的解决方案假设您熟悉GA(自己实施起来并不困难)

看一下您给出的示例图,让我们假设节点将被放置在NxN网格(整数位置)上,然后编码基因组,请考虑以下方案:

00101 00100 11010 11110 11000     
  A     B     C     D     E

其中每个部分编码节点的网格中的位置(以二进制形式)(按此顺序)。每个部分的长度取决于网格的大小(长度= ceil(log2(N * N))) 网格从左到右逐行编号。

例如,对于包含4个节点(A,B,C,D)和3x3网格的完整图形,字符串:

0011 0001 0101 1000    =   3  1  5  8 
 A    B    C    D          A  B  C  D

表示以下布局:

. B .       00  01  02
A . C       03  04  05
. . D       06  07  08

接下来,我们像往常一样设计 crossover 运算符(单点或双点交叉),并且变异也是如此(随机翻转一位)。我们必须确保在任何时候,网格内只有有效位置 最后,适应度函数将是路径上节点之间距离的函数(多个路径的总和),这将对长路径进行处罚(作为最小化问题)。 一个例子是在节点之间取city-block distance 该方法的其余部分是标准遗传算法(初始化,评估,选择,再现,终止)。

示例 为了说明,考虑以下两条路径,考虑具有城市街区距离的先前布局:A D C BC B D A

A -> D -> C -> B
  3  + 1  + 2    = 6        therefore
C -> B -> D -> A              fitness(0011 0001 0101 1000) = 6 + 8 = 14
  2  + 3  + 3    = 8

显然,目标是找到最小化适应度函数的布局。