免责声明
首先,这是为了作业,所以不要问为什么这么做作,就是这样,也只能这样。(我得到很多“如果你改变一些东西怎么样”),对不起......我不能。
另外我必须使用进化算法,这意味着父母有孩子,他们可以变异/重组,形成新的世代并最终导致解决方案。
/免责声明
我有n*2
长度为 n 的单词。我必须制作一个n^2
包含所有这些单词的矩阵。这些词可能是胡言乱语,但它们必须能够适应这个矩阵(这是用户的要求)。
因此AGE,AGO,BEG,CAB,CAD,DOG
会给我这个结果(至少有 2 个可能):
C A B
A G E
D O G
我必须使用进化算法。因此,我需要找到一种方法将我的信息编码到染色体中。
我确实想出了:
每个单词都必须出现,在矩阵中具有起始位置和方向(左右或上下)。因此我有[Word][Orientation][StartPosition]
哪里开始位置是[0][0]
/ [0][1]
/ [1][0]
etc(左列和顶行)。但它有限制,我需要验证方向是否适合起始位置。
问题:
染色体必须是可能的解决方案,而这只是解决方案的一部分。
因为我的解决方案必须是一个包含所有单词的矩阵,以“适合”染色体也必须以某种方式代表整个矩阵。但这会遇到几个问题。我只能从一个方向的一个起始位置有一个单词(除了前两个单词,它们在不同方向共享相同的起始位置)。我看不出这是尝试进化算法的有效方式。我只是看不到任何阶段的工作,尤其是突变/重组。
我认为它完全错误吗?如果是这样……为什么?以及我如何尝试以这样一种方式对我的数据进行编码,以便让我经历所有阶段(繁殖、突变/重组、自然选择……能够计算适应度并开始新一代)而无需大量垃圾数据(一个单词出现两次,丢失一个单词,与它的起始位置相比,一个单词的方向错误)?
编辑
我将使用这种表示来实现许多其他受自然启发的算法,因此我需要一个“好的”数据表示。没有什么临时的东西会在以后伤害我。
不过老实说,我想不出什么好办法。因为我有很多限制(也许我一直在思考这个问题太久了,我无法超越它们,而且它们可能并不真的存在)。我真的很想要一个二进制表示,但这似乎是不可能的。