Lua 3点交叉有助于开始。

我想实现一个遗传编程的三点交叉,但我不知道该如何做和从哪里开始。

我的输入是:

a = {(第一组),(第二组),...等等}

例如 a = {(12345,67890),(09876,54321)}(这些是数字,不是字符串)

输出:类似这样的东西:

示例:a_1 = {(12895),(67340)} 还是数字。

谢谢回复,对我的糟糕英语表示抱歉。

点赞
用户2726734
用户2726734

以下是我使用大多数整数算术实现的 k 点交叉的快速实现。可以在此基础上使用循环来扩展它,交叉多个整数对的染色体。

math.randomseed(111)
-- math.randomseed(os.time())

a = 12345
b = 67890
len = 5 -- 数字的位数

function split(mum, dad, len, base)
    local split = math.pow(base, math.random(len))
    local son = math.floor(dad / split) * split + mum % split
    local daughter = math.floor(mum / split) * split + dad % split
    return son, daughter
end

function kpoint(mum, dad, len, base, k)
    for i=1, k do
      mum, dad = split(mum, dad, len, base)
    end
    return mum, dad
end

s, d = kpoint(a, b, len, 10, 3) -- 在基数为 10 的情况下进行 3 点交叉
print(s) -- 67395
print(d) -- 12840

-- 二进制,(交叉二进制表示)
s, d = kpoint(tonumber("10001", 2), tonumber("10110", 2), 5, 2, 3)
print(s) -- 23,即在基数为 2 的情况下的(10111)
print(d) -- 16,即在基数为 2 的情况下的(10000)

-- 二进制,(交叉基数为 10,但将其解释为二进制)
s, d = kpoint(1101, 1010, 4, 10, 3)
print(s) -- 1001
print(d) -- 1110
2014-11-24 22:51:40