/// <summary>
 /// sin()関数の学習の例
 /// <para>NeuralNetworkクラスを直接利用して関数近似を行わせるサンプルです。</para>
 /// <para>
 /// 2011/12/25現在、0~1までの出力しか得られない。
 /// 出力関数と学習則を変更するか、関数近似時には値のマッピングが必要である。
 /// 他の人はどうやってんだろう?</para>
 /// </summary>
 public static void sin_learnig()
 {
     var para = new Parameter(1, 13, 1, 3, 0.01);            // ニューラルネットのパラメータ設定
     var NNforSin = new NeuralNetwork();                     // ニューラルネットクラスのインスタンス生成
     NNforSin.Setup(para);
     for (int i = 0; i < 500; i++)                           // 学習開始
     {
         Console.Write("\nnow i: " + i.ToString() + "@ ");
         Console.Write("ans = ");
         for (int k = 0; k < 15; k++)
         {
             double theta = (double)k / 15.0 * 2.0 * Math.PI;
             double ans = 0.0;
             for (int l = 0; l < 100; l++) ans = NNforSin.Learn(theta, Math.Sin(theta));       // 特徴ベクトルと教師ベクトルを渡す
             Console.Write(", " + ans.ToString("0.000"));
         }
     }
     NNforSin.Save("NN.ini");
     return;
 }
 /// <summary>
 /// XORの学習の例
 /// <para>NeuralNetworkクラスを直接操作して論理演算を実行する例です。</para>
 /// </summary>
 public static void XOR_learning()
 {
     var para = new Parameter(2, 5, 1, 1, 0.1);                          // ニューラルネットのパラメータ設定(中間層が多いと、学習係数を小さくとる必要がある)7層が限界・・
     var NNforXOR = new NeuralNetwork();                                 // ニューラルネットクラスのインスタンス生成
     NNforXOR.Setup(para);
     for (int i = 0; i < 100; i++)                                       // 学習開始
     {
         var ans = new double[4];
         Console.Write("now i: " + i.ToString() + "@ ");
         for (int k = 0; k < 100; k++)
         {
             ans[0] = NNforXOR.Learn(new double[2] { 0.0, 0.0 }, 0.0);   // 特徴ベクトルと教師ベクトルを渡す
             ans[1] = NNforXOR.Learn(new double[2] { 0.0, 1.0 }, 1.0);
             ans[2] = NNforXOR.Learn(new double[2] { 1.0, 0.0 }, 1.0);
             ans[3] = NNforXOR.Learn(new double[2] { 1.0, 1.0 }, 0.0);
         }
         Console.WriteLine("ans = " + ans[0].ToString("0.000") + ", " + ans[1].ToString("0.000") + ", " + ans[2].ToString("0.000") + ", " + ans[3].ToString("0.000") +
             ", 最後の学習結果→Error variation," + NNforXOR.VariationOfError.ToString("0.000") + ", Total Error," + NNforXOR.TotalOutputError.ToString("0.000"));
     }
     NNforXOR.Save("NN.ini");
     return;
 }