このディレクトリの索引

'1点交叉は,単純交叉とよばれる最も単純な交叉規則である。1点交叉では,親1,親2の文字列上で交叉点"|"をランダムに1箇所選び,交叉点の右側の2つの親の部分文字列をそっくりそのまま交換して,子1,子2を生成する。'(_親1,_親2,_1点交叉後の親1,_1点交叉後の親2) :-
        '交叉点をランダムに1箇所選び、'(_親1,_親2,_交叉点),
        '交叉点の右側の2つの親の部分文字列をそっくりそのまま交換して,子1,子2を生成する。'(_親1,_親2,_交叉点,_1点交叉後の親1,_1点交叉後の親2).

'交叉点をランダムに1箇所選び、'(_親1,_親2,_交叉点) :-
        length(_親1,_長さ1),
        length(_親2,_長さ2),
        '交叉点をランダムに1箇所選び、'(_親1,_長さ1,_親2,_長さ2,_交叉点).

'交叉点をランダムに1箇所選び、'(_親1,_長さ1,_親2,_長さ2,_交叉点) :-
        _長さ1 =< _長さ2,
        _交叉点 is random(_長さ1),!.
'交叉点をランダムに1箇所選び、'(_親1,_長さ1,_親2,_長さ2,_交叉点) :-
        _交叉点 is random(_長さ2).

'交叉点の右側の2つの親の部分文字列をそっくりそのまま交換して,子1,子2を生成する。'(_親1,_親2,_交叉点,_1点交叉後の親1,_1点交叉後の親2) :-
        '交叉点の右側の2つの親の部分文字列を'(_親1,_親2,_親1の前半文字列,_親1の後半文字列,_親2の前半文字列,_親2の後半文字列),
        'そっくりそのまま交換して,子1,子2を生成する。'(_親1の前半文字列,_親1の後半文字列,_親2の前半文字列,_親2の後半文字列,_1点交叉後の親1,_1点交叉後の親2).

'交叉点の右側の2つの親の部分文字列を'(_親1,_親2,_親1の前半文字列,_親1の後半文字列,_親2の前半文字列,_親2の後半文字列) :-
        sub_atom(_親1,0,_交叉点,_残り長さ1,_親1の前半文字列),
        sub_atom(_親1,_交叉点,_残り長さ1,0,_親1の後半文字列),
        sub_atom(_親2,0,_交叉点,_残り長さ2,_親2の前半文字列),
        sub_atom(_親2,_交叉点,_残り長さ2,0,_親2の後半文字列).

'そっくりそのまま交換して,子1,子2を生成する。'(_親1の前半文字列,_親1の後半文字列,_親2の前半文字列,_親2の後半文字列,_1点交叉後の親1,_1点交叉後の親2) :-
        atom_concat(_親1の前半文字列,_親2の後半文字列,_1点交叉後の親1),
        atom_concat(_親2の前半文字列,_親1の後半文字列,_1点交叉後の親2).