さらに考えてみると、格子ax = by mod Nの滑らかな係数x、yに向かう最善の方法は、遺伝的アルゴリズムではなく回帰を使用することです。
2つの回帰が実行されます。1つは、ランダムに選択されたax = bymodNの解からのx値で構成される応答ベクトルR0を使用します。もう1つは、同じ解からのy値で構成される応答ベクトルR1を使用します。両方の回帰は同じ説明行列Xを使用します。Xには、滑らかな除数を法とするx値の剰余からなる列と、他の滑らかな除数を法とするy値の剰余からなる他の列があります。
滑らかな除数の最良の選択は、各回帰からのエラーを最小化するものです。
E0 = R0-X((X-transpose)(X)の逆)(X-transpose)(R0)
E1 = R1-X((X-transpose)(X)の逆)(X-transpose)(R1)
以下は、Xを消滅させるための行演算です。次に、これらの行演算の結果zを、Xが形成された元の解からのx値とy値に適用します。
z R0 = z R0 - 0
= z R0 - zX (inverse of (X-transpose)(X)) (X-transpose) (R0)
= z E0
同様に、z R1 = z E1
3つのプロパティがzR0とzR1で結合されました。
- zは剰余をモジュロ平滑数で消滅させるため、これらは大きな平滑数の倍数です。
- E0とE1が小さいので、それらは比較的小さいです。
- ax = by mod Nの解の線形結合と同様に、zR0とzR1はそれ自体がその方程式の解です。
大きな滑らかな数の比較的小さな倍数は、滑らかな数そのものである可能性があります。ax = by mod Nの滑らかな解を得ると、Dixonの方法への入力が得られます。
2つの最適化により、これが特に高速になります。
- Xのすべての滑らかな数と列を一度に推測する必要はありません。回帰を継続的に実行し、一度に1つの列をXに追加して、E0とE1を最も減らす列を選択できます。公約数を持つ2つの滑らかな数値が選択されることはありません。
- また、modNによるzx=の多くのランダムな解から始めて、Xの新しい列の選択間で最大のエラーを持つものを削除することもできます。