データセットに配置する必要があるかなり大きな(大きすぎないが、おそらく50以上の)条件セットがあります(または、条件に合わせてデータを操作する必要があります)。
たとえば、長さ n の 2 進数のシーケンスがあるとします。
n = 5 の場合、データ内の要素は {0,1,1,0,0} または {0,0,0,1,1} などになります...
しかし、次のような一連の条件があるかもしれません
- x_3 + x_4 = 2
- 合計 (x_even) <= 2
- x_2*x_3 = x_4 mod 2
等...
条件は実験に由来するという点で非常に複雑であり(論理形式で書き留めることはできますが)、診断が難しいため、代わりに有効なデータの大きなサンプルセットを使用したいと思います. つまり、私が知っているデータは条件を満たし、かなり大きなセットです。つまり、データが従わなければならない条件を推測するよりも、データを収集する方が簡単です。
そうは言っても、基本的に私がやっていることはニューラルネットワークに非常に似ています。違いは、ネットワークの代わりに実行できる何らかの形式のコードで、ある意味で最適な実際のアルゴリズムが欲しいということです。
私が実際に何をしようとしているのかは明らかではないかもしれません。私が持っているのは、一意で明確な生の形式のデータのセットですが、私のニーズには適していません (ある意味で、データの量が多すぎます)。
データを別のセットにマップする必要がありますが、これは実際にはある程度あいまいですが、すべてのデータが従う特定の制約のセットもあります (特定のことは起こり得ませんが、他のものは優先されます)。
固有の制約と好みを把握するのは困難です。つまり、あいまいでないセットからあいまいなセットへのマッピングは記述が困難です (これがあいまいな理由です)。実際の目標は、可能であれば正しい制約を提供することによって、明確なマップを作成することです。
したがって、最初の例に沿って、一連の要素が与えられ (または供給され)、リストしたものと同様の制約のリストを導出する何らかの方法が必要です。
ある意味では、有効なデータのセットを用意して、それをニューラル ネットワークと非常によく似た方法でトレーニングするだけです。
次に、この「トレーニング」の後、データセット内の任意の要素で使用できるマッピング関数が与えられ、制約を満たす新しい要素が生成されます。それができない場合は、可能な限り明確な結果。
ニューラル ネットワークと私が達成しようとしていることの主な違いは、ニューラル ネットワークを実行する代わりに、使用するアルゴリズムをコーディングできるようにしたいということです。ここでの違いは、アルゴリズムがおそらくはるかに複雑ではなく、潜在的な再トレーニングを必要とせず、はるかに高速になることです。
簡単な例を次に示します。
私の「トレーニングセット」がバイナリシーケンスとマッピングであるとします
01000 => 10000 00001 => 00010 01010 => 10100 00111 => 01110
次に、「Magical Algorithm Finder」(tm) から、次のようなマッピングを取得します
f(x) = x rol 1 (rol = 左に回転)
またはそれを表現したい方法は何でも。
次に、f(x) を x = 011100 などの他の要素に単純に適用し、f を適用して、うまくいけば明確な出力を生成することができます。
もちろん、この例で機能する関数はたくさんありますが、目標は、データセットを十分に提供して、うまくいけば最も意味のあるいくつかの関数に絞り込むことです (少なくとも、トレーニング セットを常に正しくマッピングします)。 .
私の特定のケースでは、長さ m の 2 進数字のセットを長さ n のベース B 数字のセットにマッピングするように問題を簡単に変換できました。制約により、一部の数値が逆になることが防止されます。たとえば、マッピングは単射的ですが、全射的ではありません。
私のアルゴリズムは、必要に応じて数字に作用するステートメントの場合、単純なコレクションになる可能性があります。