math - 压缩数学图

标签 math graph mathematical-optimization

我想画一个像这样的图形:
alt text http://img25.imageshack.us/img25/9786/problemo.png

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

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

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

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

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

最佳答案

每当遇到难以解决的优化问题时,我就会想到genetic algorithms .我下面的解决方案假设您熟悉 GA(自己实现不是很困难)
查看您提供的示例图,让我们假设节点将放置在 NxN 网格(整数位置)上,然后编码基因组,请考虑以下方案:

00101 00100 11010 11110 11000     
  A     B     C     D     E

其中每个部分对节点(按该顺序)在网格(二进制)中的位置进行编码。每个部分的长度取决于网格的大小( length=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

接下来我们像往常一样设计交叉算子(一点或两点交叉)和变异(随机翻转一位)。我们只需要确保在任何时候,我们只有 有效职位网格内。
最后,适应度函数将是路径上节点之间距离的某个函数(多条路径的总和),这将惩罚长路径(作为最小化问题)。
一个例子是取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

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

关于math - 压缩数学图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1481932/

相关文章:

linux - Bash 变量数学不起作用

php - 在它填充的多边形改变尺寸后计算新的渐变位置

Java函数作为方法参数

Javascript 图形可视化库

在游戏中寻找食物分配最佳路线的算法

algorithm - 次阶乘模质数 (!n mod p)

javascript - 获取视口(viewport)中元素位置的百分比

javascript - 谷歌图表线: how to connect dots properly using a continuous axes

algorithm - 购物车最小化算法

algorithm - 在大型稀疏矩阵中查找大型非稀疏子矩阵