问题
我正在尝试解决一个经典的二维装箱问题的变体 - 类似于这个问题。
给定任意多边形P和短语W,我希望使用平移、缩放和90度旋转将W的字母“装”入P中,使得:
- W的字母尽可能覆盖P;
- W中的字母保持一般有序(也就是说,虽然W可能被分成更小的序列,但该序列中的字母应该仍然可读)。
以下是我想要实现的一些示例:
当前方法
我已开始建立遗传算法来尝试解决这个问题,它采取以下方法:
- 在
256x256
网格内映射P; - 为W中的每个字母创建一个简化的边界多边形;
- 使用每个字母的位置、旋转和缩放作为染色体(作为灰度编码二进制字符串,每个x位置、y位置和缩放有8位,旋转有2位,因此染色体大小为
26*length(W)
位); - 使用交叉策略将A中的
n
个字母与B中的length(W) - n
个字母结合起来; - 使用简单的突变策略,选择进行突变的个体中每个位被突变的概率是
1/26
;
目前算法正在运行并找到解决方案,尽管它们还不是特别美观,因为适应度函数没有考虑字母之间的重叠或易读性约束。
它也非常缓慢,因为适应度评估需要大量的几何计算(我用Ruby编写算法,但使用C扩展来处理几何问题)。我正在考虑使用神经网络(或者可能是SVM)生成适应度估计,符合这篇论文和这篇论文中的想法。
问题
我有一些关于我迄今为止所做的事情的问题:
首先,整体方法是否合理?显然,大部分工作和计算时间将花在调整适应度函数上,但在我深入研究这个问题之前,我想检查自己的方向是否正确,并且是否存在更好的方法来解决这个问题。
如何制定适应度函数以考虑字母排序/易读性约束?
是否有任何优化可以对适应度函数进行,以提高我可以合理计算的世代数量?
如果您有其他想法或建议,也将不胜感激。我已经阅读了大多数相关主题的现有SO问题,并阅读了一些关于该主题的论文,但还没有发现专门处理文本包装的内容。
谢谢!