From df840e99cf011098b39321bb13d16eeb770b379c Mon Sep 17 00:00:00 2001
From: amirabdelrahman <amira-rahman@aucegypt.edu>
Date: Mon, 11 May 2020 10:55:29 -0400
Subject: [PATCH] documentation and voxel,df,dnn search done

---
 README.md                      |   51 +-
 Representation Comparison.xlsx |  Bin 13911 -> 14295 bytes
 cpp_dft/main.cpp               |  287 +++++--
 cpp_dnn/cmaes_initials.par     |  116 +++
 cpp_dnn/cmaes_signals.par      |   77 ++
 cpp_dnn/dnn.cpp                |   25 +-
 cpp_dnn/image.cpp              |   20 +-
 cpp_dnn/main.cpp               | 1474 ++++++++++++++++++++++++++------
 cpp_voxel/main.cpp             |  104 +--
 img/df/1.png                   |  Bin 0 -> 717 bytes
 img/df/2.png                   |  Bin 0 -> 757 bytes
 img/df/3.png                   |  Bin 0 -> 1152 bytes
 img/df/4.png                   |  Bin 0 -> 767 bytes
 img/df/5.png                   |  Bin 0 -> 817 bytes
 img/dft/1.png                  |  Bin 0 -> 490 bytes
 img/dft/2.png                  |  Bin 0 -> 454 bytes
 img/dnn_cmaes/1.png            |  Bin 0 -> 709 bytes
 img/dnn_cmaes/2.png            |  Bin 0 -> 582 bytes
 img/dnn_cmaes/3.png            |  Bin 0 -> 1020 bytes
 img/dnn_cmaes/4.png            |  Bin 0 -> 783 bytes
 img/dnn_cmaes/5.png            |  Bin 0 -> 711 bytes
 img/dnn_sgd/1.png              |  Bin 0 -> 663 bytes
 img/dnn_sgd/2.png              |  Bin 0 -> 568 bytes
 img/dnn_sgd/3.png              |  Bin 0 -> 1043 bytes
 img/dnn_sgd/4.png              |  Bin 0 -> 761 bytes
 img/dnn_sgd/5.png              |  Bin 0 -> 761 bytes
 img/voxel/1.png                |  Bin 0 -> 667 bytes
 img/voxel/2.png                |  Bin 0 -> 580 bytes
 img/voxel/3.png                |  Bin 0 -> 1090 bytes
 img/voxel/4.png                |  Bin 0 -> 764 bytes
 img/voxel/5.png                |  Bin 0 -> 752 bytes
 31 files changed, 1719 insertions(+), 435 deletions(-)
 create mode 100644 cpp_dnn/cmaes_initials.par
 create mode 100644 cpp_dnn/cmaes_signals.par
 create mode 100644 img/df/1.png
 create mode 100644 img/df/2.png
 create mode 100644 img/df/3.png
 create mode 100644 img/df/4.png
 create mode 100644 img/df/5.png
 create mode 100644 img/dft/1.png
 create mode 100644 img/dft/2.png
 create mode 100644 img/dnn_cmaes/1.png
 create mode 100644 img/dnn_cmaes/2.png
 create mode 100644 img/dnn_cmaes/3.png
 create mode 100644 img/dnn_cmaes/4.png
 create mode 100644 img/dnn_cmaes/5.png
 create mode 100644 img/dnn_sgd/1.png
 create mode 100644 img/dnn_sgd/2.png
 create mode 100644 img/dnn_sgd/3.png
 create mode 100644 img/dnn_sgd/4.png
 create mode 100644 img/dnn_sgd/5.png
 create mode 100644 img/voxel/1.png
 create mode 100644 img/voxel/2.png
 create mode 100644 img/voxel/3.png
 create mode 100644 img/voxel/4.png
 create mode 100644 img/voxel/5.png

diff --git a/README.md b/README.md
index 50ab961..466338e 100644
--- a/README.md
+++ b/README.md
@@ -32,11 +32,52 @@ Search methods used: nelder mead, gradient descent, EM and CMAES.
 
 All target Images are 100*100
 
-<img src="img/circle_target.png" alt="drawing" width="200"/>
-<img src="img/rectange_target.png" alt="drawing" width="200"/>
-<img src="img/gear_target.png" alt="drawing" width="200"/>
-<img src="img/blob_target.png" alt="drawing" width="200"/>
-<img src="img/hole_target.png" alt="drawing" width="200"/>
+<img src="img/circle_target.png" width="200">
+<img src="img/rectange_target.png" width="200">
+<img src="img/gear_target.png" width="200">
+<img src="img/blob_target.png" width="200">
+<img src="img/hole_target.png" width="200">
+
+----
+
+### Example Best Results
+
+- parametric frep (~ 5 parameters)
+- frep trees (~ 10 parameters)
+- dft (~ 20 parameters) 
+- DNN/DMN (~ 300 parameters)
+  - cmaes
+
+<img src="img/dnn_cmaes/1.png" width="200">
+<img src="img/dnn_cmaes/2.png" width="200">
+<img src="img/dnn_cmaes/3.png" width="200">
+<img src="img/dnn_cmaes/4.png" width="200">
+<img src="img/dnn_cmaes/5.png" width="200">
+
+  - sgd
+
+<img src="img/dnn_sgd/1.png" width="200">
+<img src="img/dnn_sgd/2.png" width="200">
+<img src="img/dnn_sgd/3.png" width="200">
+<img src="img/dnn_sgd/4.png" width="200">
+<img src="img/dnn_sgd/5.png" width="200">
+
+- distance fields (~ 400 parameters) 
+
+<img src="img/df/1.png" width="200">
+<img src="img/df/2.png" width="200">
+<img src="img/df/3.png" width="200">
+<img src="img/df/4.png" width="200">
+<img src="img/df/5.png" width="200">
+
+- point cloud/mesh (~ 1,000 parameters)
+- voxel search (~ 10,000 parameters)
+  
+<img src="img/voxel/1.png" width="200">
+<img src="img/voxel/2.png" width="200">
+<img src="img/voxel/3.png" width="200">
+<img src="img/voxel/4.png" width="200">
+<img src="img/voxel/5.png" width="200">
 
 ---
 ### dft progress
diff --git a/Representation Comparison.xlsx b/Representation Comparison.xlsx
index 893ab9689f6dc18cab4344f1d6192955040ee9b0..2484358bc85a05b62badb7c6a58cb9da4bd0232a 100644
GIT binary patch
delta 7581
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
JwpbI8BmlXt{&@fZ

delta 7175
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
A!~g&Q

diff --git a/cpp_dft/main.cpp b/cpp_dft/main.cpp
index 76f8361..d6a7939 100644
--- a/cpp_dft/main.cpp
+++ b/cpp_dft/main.cpp
@@ -81,7 +81,7 @@ cv::Mat drawFrep(Frep* frep,scalar minX,scalar maxX,scalar minY,scalar maxY,scal
     //         cv::Scalar(0,0,0), // BGR Color
     //         1); // Line Thickness (Optional)
 
-    std::string fileName="img/"+name+".png";
+    std::string fileName="img_dft/"+name+".png";
     cv::imwrite( fileName, image );
     if(preview){
         cv::namedWindow("Display Image", cv::WINDOW_AUTOSIZE );
@@ -310,7 +310,7 @@ cv::Mat dft(int w, int h, const int resolution, std::vector<scalar> mag,std::vec
                 cv::Scalar( 0, 0, 0 ),
                 lineType );
     
-    std::string fileName="img/"+name+".png";
+    std::string fileName="img_dft/"+name+".png";
     cv::cvtColor(img, img, cv::COLOR_BGR2GRAY);
     if(save){
         cv::imwrite ( fileName, img );
@@ -368,97 +368,84 @@ scalar compareToTarget(int width,int height,const int resolution,Vector v, cv::M
 
 int main(int const, char const**) {
    
-    scalar res=0.01f;
-    scalar bound =3.0f;
 
 
     float precision = 0.001f;
 
     
+    scalar res=0.05f;
+    scalar bound =2.5f;
+
+
+    
     scalar minX=-bound;
     scalar maxX=bound;
     scalar minY=-bound;
     scalar maxY=bound;
     scalar dx=res;
     scalar dy=res;
-
     int height=(int)((maxX-minX)/dx);
     int width=(int)((maxY-minY)/dy);
 
-    // defines the complex number: (10 + 2i) 
-    // std::complex<scalar> mycomplex(10.0f, 2.0f); 
-    // std::complex<scalar> mycomplex =polar (1.0f, 0.927295f) ;
-    // std::complex<scalar> j;
-    // j=-1.0f;
-    // j=sqrt(j);
+    cout<<"width: "<<width<<", height: "<<height <<std::endl;
 
-    // std::complex<scalar> trial = mycomplex * exp (-1.0f*PI_F*j*1.0f);
-    // std::complex<scalar> trial = exp (-1.0f*PI_F*j*1.0f);
-    
-    // // prints the real part using the real function 
-    // cout << "Real part: " << real(trial) << endl; 
-    // cout << "Imaginary part: " << imag(trial) << endl;
 
-    // cout << "The complex whose magnitude is " << 5.0; 
-    // cout << " and phase angle is " << 0.927295; 
-        
-    // // use of polar() 
-    // cout << " is " << polar (5.0, 0.927295) << endl; 
+    const int resolution=19;
 
-    // // defines the complex number: (3.0+4.0i) 
-    // std::complex<double> mycomplex (3.0, 4.0); 
-    
-    // // prints the absolute value of the complex number 
-    // cout << "The absolute value of " << mycomplex << " is: "; 
-    // cout << abs(mycomplex) << endl; //magnitude
-        
-    // // prints the argument of the complex number 
-    // cout << "The argument of " << mycomplex << " is: "; 
-    // cout << arg(mycomplex) << endl; //phase
+    cpp_frep::Circle c(1.5f,0.0f,0.0f);
+    // std::vector<unsigned char> targ1 =drawFrep(&c,minX, maxX, minY, maxY, dx, dy,"circle_target",false);
+    cv::Mat targ1 =drawFrep(&c,minX, maxX, minY, maxY, dx, dy,"dft_circle",false);
 
+    cpp_frep::Rectangle r(-1.5f,1.5f,-1.0f,1.0f);
+    cpp_frep::Rotate rot1 (&r,0.0f,0.0f,90.0f);
+    // std::vector<unsigned char> targ2 =drawFrep(&rot1,minX, maxX, minY, maxY, dx, dy,"rectange_target",false);
+    cv::Mat targ2 =drawFrep(&rot1,minX, maxX, minY, maxY, dx, dy,"dft_reactangle",false);
 
-    
+    cpp_frep::InvoluteGear gear( 1.0f,  1.0f, 1.1f, 20.0f, 8.0f) ;
+    cpp_frep::Rotate rot (&gear,0.0f,0.0f,15.0f);
+    cpp_frep::Scale sc1(&rot,0.0f,0.0f,0.5f,0.5f);
+    cpp_frep::Add target(&sc1,&c);
+    // std::vector<unsigned char> targ3 =drawFrep(&target,minX, maxX, minY, maxY, dx, dy,"gear_target",false);
+    cv::Mat targ3 =drawFrep(&target,minX, maxX, minY, maxY, dx, dy,"dft_gear",false);
 
-    // std::vector<scalar> mag ={0.0f,0.5f,    0.25f,0.1f,0.05f};
-    // std::vector<scalar> ampl={0.0f,0.0f,PI_F/2.0f,0.0f,0.0f};
 
-    const int resolution=19;
+    cpp_frep::Circle c1(0.9f,-0.5f,0.8f);
+    cpp_frep::Circle c2(0.8f,0.2f,-0.2f);
+    cpp_frep::Circle c3(0.9f,1.5f,0.0f);
+    cpp_frep::Circle c4(0.9f,1.7f,-1.1f);
+    // Subtract ss(&rot1,&c1);
+    
+    // Subtract sss(&ss,&c2);
+    cpp_frep::Add aa(&c1,&c3);
+    cpp_frep::Add aaa(&aa,&c2);
+    cpp_frep::Add a(&aaa,&c4);
+    cpp_frep::Morph m (&a,&target,0.6f);
+    cpp_frep::Rotate rot2 (&m,0.3f,0.0f,-90.0f);
+    // Scale scc (&m,0.0f,0.0f,1.0,1.0);
+    // std::vector<unsigned char> targ4 =drawFrep(&rot2,minX, maxX, minY, maxY, dx, dy,"blob_target",false);
+    cv::Mat targ4 =drawFrep(&rot2,minX, maxX, minY, maxY, dx, dy,"dft_blob",false);
 
-    // std::vector<scalar> mag ={0.0f, 1.0f,0.0f,0.0f,0.0f,0.0f,0.0f,0.0f,0.0f,0.0f,0.0f,0.0f,0.0f,0.0f, 0.05f};
-    // std::vector<scalar> ampl={0.0f, 0.0f,0.0f,0.0f,0.0f,0.0f,0.0f,0.0f,0.0f,0.0f,0.0f,0.0f,0.0f,0.0f, 0.0f};
-    // cv::Mat d = dft(width, height, resolution, mag , ampl,"dft",true,true);
+    cpp_frep::Circle c5(0.5f,0.0f,0.0f);
+    cpp_frep::Subtract ss(&c,&c5);
+    // std::vector<unsigned char> targ5 =drawFrep(&ss,minX, maxX, minY, maxY, dx, dy,"hole_target",false);
+    cv::Mat targ5 =drawFrep(&ss,minX, maxX, minY, maxY, dx, dy,"dft_hole",false);
 
-    // mag=getRandomMag(resolution);
-    // ampl=getRandomAmpl(resolution);
-    // cv::Mat d = dft(width, height, resolution, mag,ampl,"dft",true);
-    // cv::cvtColor(d, d, cv::COLOR_BGR2GRAY);
-    // cv::cvtColor(targ, targ, cv::COLOR_BGR2GRAY);
-    // cv::Mat diff= d-targ;
-    // cout<< "nonzero: "<<countNonZero(diff)<<endl;
-    // cout<< "size: "<<width*height<<endl;
-    // cout<< "norm l2: "<<cv::norm(d, targ,  cv::NORM_L2)<<endl;
-    // cout<< "norm l1: "<<cv::norm(d, targ,  cv::NORM_L1)<<endl;
-    // cout<< "norm NORM_HAMMING: "<<cv::norm(d, targ,cv::NORM_HAMMING )<<endl;
-    // cout<< "norm NORM_HAMMING2: "<<cv::norm(d, targ,cv::NORM_HAMMING2 )<<endl;
-    // cout<< "norm NORM_L2SQR: "<<cv::norm(d, targ,cv::NORM_L2SQR )<<endl;
-    // cout<< "norm: "<<cv::norm(d, targ)<<endl;
-    
 
 
-    // cv::namedWindow("Display Image", cv::WINDOW_AUTOSIZE );
-    // cv::imshow("Display Image", diff);
-    // cv::waitKey(0);
 
-    Circle c(1.2f,0.0f,0.0f);
-    InvoluteGear gear( 1.0f,  1.0f, 1.1f, 20.0f, 8.0f) ;
-    Rotate rot (&gear,0.0f,0.0f,15.0f);
-    Scale sc1(&rot,0.0f,0.0f,0.3f,0.3f);
-    Add target(&sc1,&c);
-    cv::Mat targ =drawFrep(&target,minX, maxX, minY, maxY, dx, dy,"dft_target",false);
+    // Circle c(1.2f,0.0f,0.0f);
+    // InvoluteGear gear( 1.0f,  1.0f, 1.1f, 20.0f, 8.0f) ;
+    // Rotate rot (&gear,0.0f,0.0f,15.0f);
+    // Scale sc1(&rot,0.0f,0.0f,0.3f,0.3f);
+    // Add target(&sc1,&c);
+    cv::Mat targ;
 
     // Circle c(1.0f,0.0f,0.0f);
     // cv::Mat targ =drawFrep(&c,minX, maxX, minY, maxY, dx, dy,"dft_target",false);
-    cv::cvtColor(targ, targ, cv::COLOR_BGR2GRAY);
+    cv::cvtColor(targ3, targ, cv::COLOR_BGR2GRAY);
+
+
+
 
     ///neldermead
 
@@ -484,7 +471,7 @@ int main(int const, char const**) {
     int count2=0;
     int maxSteps=10000;
     int maxSteps1=10000;
-    int saveEvery=10;
+    int saveEvery=25;
     scalar score=0.0f;
 
     std::string name1 = "ii";
@@ -503,6 +490,7 @@ int main(int const, char const**) {
         if(count2>=saveEvery){
             //save
             score=compareToTarget( width, height,resolution,v, targ ,name,true,false);
+            std::cout<<"Step:"<<count<<", total:"<< count1<<", score:"<<-score<<"\n";
             count2=0;
 
         }else{
@@ -511,7 +499,7 @@ int main(int const, char const**) {
 
         }
             
-        std::cout<<"Step:"<<count<<", total:"<< count1<<", score:"<<-score<<"\n";
+        
         v = o.step(v, score);
         count++;
         count1++;
@@ -538,3 +526,170 @@ int main(int const, char const**) {
 }
 
 
+///target1
+    // Step:25, total:25, score:44004
+    // Step:51, total:51, score:40950
+    // Step:77, total:77, score:26444
+    // Step:103, total:103, score:23756
+    // Step:129, total:129, score:16948
+    // Step:155, total:155, score:14380
+    // Step:181, total:181, score:13500
+    // Step:207, total:207, score:12524
+    // Step:233, total:233, score:13532
+    // Step:259, total:259, score:12020
+    // Step:285, total:285, score:12356
+    // Step:311, total:311, score:11908
+    // Step:337, total:337, score:11772
+    // Step:363, total:363, score:12788
+    // Step:389, total:389, score:11564
+    // Step:415, total:415, score:12196
+    // Step:441, total:441, score:11636
+    // Step:467, total:467, score:12268
+    // Step:493, total:493, score:11724
+    // Step:519, total:519, score:11796
+    // Step:545, total:545, score:11932
+    // Step:571, total:571, score:12180
+    // Step:597, total:597, score:11740
+    // Step:623, total:623, score:11812
+    // Step:649, total:649, score:12172
+    // Step:675, total:675, score:11764
+    // Step:701, total:701, score:11972
+    // Step:727, total:727, score:11836
+    // Step:753, total:753, score:11740
+    // Step:779, total:779, score:11716
+    // Step:805, total:805, score:11732
+    // Step:831, total:831, score:11812
+    // Step:857, total:857, score:11788
+    // Step:883, total:883, score:11740
+    // Step:909, total:909, score:11860
+    // Step:935, total:935, score:11908
+    // Step:961, total:961, score:11748
+    // Step:987, total:987, score:11948
+    // Step:1013, total:1013, score:11676
+    // Step:1039, total:1039, score:12260
+    // Step:1065, total:1065, score:11764
+    // Step:1091, total:1091, score:11772
+    // Step:1117, total:1117, score:11764
+    // Step:1143, total:1143, score:11788
+    // Step:1169, total:1169, score:11972
+    // Step:1195, total:1195, score:11804
+    // Step:1221, total:1221, score:11884
+    // Step:1247, total:1247, score:11900
+    // Step:1273, total:1273, score:11868
+    // Step:1299, total:1299, score:12260
+    // Step:1325, total:1325, score:11732
+    // Step:1351, total:1351, score:11740
+    // Step:1377, total:1377, score:11900
+    // Step:1403, total:1403, score:11796
+    // Step:1429, total:1429, score:11740
+    // Step:1455, total:1455, score:11788
+    // Step:1481, total:1481, score:12236
+
+//target 2
+
+    // Step:25, total:25, score:28356
+    // Step:51, total:51, score:23300
+    // Step:77, total:77, score:24778
+    // Step:103, total:103, score:18426
+    // Step:129, total:129, score:16386
+    // Step:155, total:155, score:14418
+    // Step:181, total:181, score:13234
+    // Step:207, total:207, score:12794
+    // Step:233, total:233, score:12426
+    // Step:259, total:259, score:12746
+    // Step:285, total:285, score:11562
+    // Step:311, total:311, score:11978
+    // Step:337, total:337, score:11786
+    // Step:363, total:363, score:11282
+    // Step:389, total:389, score:12162
+    // Step:415, total:415, score:12074
+    // Step:441, total:441, score:12218
+    // Step:467, total:467, score:11530
+    // Step:493, total:493, score:11754
+    // Step:519, total:519, score:11994
+    // Step:545, total:545, score:11810
+    // Step:571, total:571, score:11658
+    // Step:597, total:597, score:11218
+    // Step:623, total:623, score:11898
+    // Step:649, total:649, score:11506
+    // Step:675, total:675, score:11442
+    // Step:701, total:701, score:11474
+    // Step:727, total:727, score:11970
+    // Step:753, total:753, score:12042
+    // Step:779, total:779, score:11594
+    // Step:805, total:805, score:11986
+    // Step:831, total:831, score:11450
+    // Step:857, total:857, score:11762
+    // Step:883, total:883, score:11522
+    // Step:909, total:909, score:11442
+    // Step:935, total:935, score:11890
+    // Step:961, total:961, score:11490
+    // Step:987, total:987, score:11986
+    // Step:1013, total:1013, score:11706
+    // Step:1039, total:1039, score:12186
+    // Step:1065, total:1065, score:11610
+    // Step:1091, total:1091, score:11866
+    // Step:1117, total:1117, score:11626
+    // Step:1143, total:1143, score:12106
+    // Step:1169, total:1169, score:11386
+    // Step:1195, total:1195, score:11450
+    // Step:1221, total:1221, score:11586
+    // Step:1247, total:1247, score:11418
+    // Step:1273, total:1273, score:11450
+    // Step:1299, total:1299, score:11610
+    // Step:1325, total:1325, score:11898
+    // Step:1351, total:1351, score:11658
+    // Step:1377, total:1377, score:11658
+    // Step:1403, total:1403, score:11746
+    // Step:1429, total:1429, score:11818
+    // Step:1455, total:1455, score:11730
+    // Step:1481, total:1481, score:11442
+    // Step:1507, total:1507, score:11786
+    // Step:1533, total:1533, score:11442
+    // Step:1559, total:1559, score:11874
+    // Step:1585, total:1585, score:11714
+    // Step:1611, total:1611, score:11626
+    // Step:1637, total:1637, score:11458
+    // Step:1663, total:1663, score:11178
+    // Step:1689, total:1689, score:12146
+    // Step:1715, total:1715, score:11634
+    // Step:1741, total:1741, score:12178
+    // Step:1767, total:1767, score:11850
+    // Step:1793, total:1793, score:11698
+    // Step:1819, total:1819, score:11634
+    // Step:1845, total:1845, score:11570
+    // Step:1871, total:1871, score:12026
+    // Step:1897, total:1897, score:11610
+    // Step:1923, total:1923, score:11490
+    // Step:1949, total:1949, score:12122
+    // Step:1975, total:1975, score:11914
+    // Step:2001, total:2001, score:11522
+    // Step:2027, total:2027, score:12314
+    // Step:2053, total:2053, score:11594
+    // Step:2079, total:2079, score:11866
+    // Step:2105, total:2105, score:11538
+    // Step:2131, total:2131, score:11362
+    // Step:2157, total:2157, score:11514
+    // Step:2183, total:2183, score:11650
+    // Step:2209, total:2209, score:11514
+    // Step:2235, total:2235, score:11554
+    // Step:2261, total:2261, score:11474
+    // Step:2287, total:2287, score:11954
+    // Step:2313, total:2313, score:11594
+    // Step:2339, total:2339, score:12098
+    // Step:2365, total:2365, score:11930
+    // Step:2391, total:2391, score:11746
+    // Step:2417, total:2417, score:11226
+    // Step:2443, total:2443, score:11506
+    // Step:2469, total:2469, score:11714
+    // Step:2495, total:2495, score:11786
+    // Step:2521, total:2521, score:12338
+    // Step:2547, total:2547, score:11618
+
+// target3
+
+// target4
+
+
+// target5
+
diff --git a/cpp_dnn/cmaes_initials.par b/cpp_dnn/cmaes_initials.par
new file mode 100644
index 0000000..c3609a9
--- /dev/null
+++ b/cpp_dnn/cmaes_initials.par
@@ -0,0 +1,116 @@
+function number 1 2 5 6 8 23  # the first number is read by example_restarts.c, see there.
+restarts 0                    # read by example_restarts.c, remark that restarts
+                              # with the same initialX might be sub-optimal
+#
+# Input parameter file for cmaes_t.
+# Comments start with '#' or '%' until end of line.
+# Actual recent parameter setting is written to file actparcmaes.par.
+#
+
+## --- OBLIGATORY SETTINGS
+# these settings, if read, overwrite the input values to cmaes_init
+
+ N 3        # Problem dimension, overwrites parameter in cmaes_init
+ initialX 10:   # Initial search point. Syntax: 1==read one number, see also end of file.
+    0.5
+    1.1
+    1.1
+#    0.1
+#    0.9
+#    0.1
+#    0.1
+#    0.4
+#    0.15
+#    0.1
+#    0.6
+#    2.8
+ typicalX 1:   # Typical search point (useful for restarts, cave: boundaries), overwritten by initialX
+    0.0        #    these are the read value(s)
+ initialStandardDeviations  1:   #  1==read only one number for all coordinates
+   0.1                           #  numbers should not differ by orders of magnitude
+                                 #  should be roughly 1/4 of the search interval
+                                 #  this number essentially influences the global
+                                 #  search ability (ie. the horizon where to search
+                                 #  at all) on multimodal functions
+
+## --- OPTIONAL SETTINGS
+
+# stop-Parameters can be changed online via cmaes_signals.par
+
+stopMaxFunEvals   1e4     # max number of f-evaluations, 900*(N+3)*(N+3) is default
+# fac*maxFunEvals   1e0     # multiplies stopMaxFunEvals by read number, default is 1
+# stopMaxIter       1e3     # max number of iterations (generations), inf is default
+stopMaxIter       3     # max number of iterations (generations), inf is default
+
+
+stopFitness -500   # stop if function value is smaller than stopFitness
+                     # commented == never stop on function value (default)
+stopTolFun 1e-1     # stop if function value differences are
+                     # smaller than stopTolFun, default=1e-12
+stopTolFunHist 1e-1 # stop if function value differences of best values are
+                     # smaller than stopTolFunHist, default was 0
+stopTolX 1e-2   # stop if step sizes/steps in x-space are
+                 # smaller than TolX, default=0
+stopTolUpXFactor 1e3 # stop if std dev increases more than by TolUpXFactor, default 1e3
+
+seed 0            # 0 == by time, also regard maxTimeFractionForEigendecomposition
+                  #   below, as for values smaller than one the outcome might not be
+                  #   exactly reproducible even with the same seed
+
+# diffMinChange 1 # Minimal coordinate wise standard deviation. Syntax see below.
+#        1e-299   # Interferes with stopTolX termination criterion! default=0
+
+
+## --- internal CPU-time related settings
+
+maxTimeFractionForEigendecompostion 1  # maximal CPU-time fraction for eigensystem
+                     # decomposition. Large values (up to one) are better
+                     # w.r.t. the number of function evaluations to reach a
+                     # certain function value. Only >=1 yields exactly
+                     # reproducible results.
+                     # 0.2==20% should often be faster than larger values
+                     # w.r.t. the CPU-time to reach a certain function value.
+
+# updatecov      1   # default is updating the eigensystem after
+                     # every 1/ccov/N/10-th generation.
+# fac*updatecov  3   # multiplier for updatecov
+
+# resume allcmaes.dat   # reads restart distribution from given file
+
+
+## --- Strategy internal parameter ---
+##     default values are set in cmaes_readpara_SupplementDefaults()
+## -- Selection related parameters
+lambda 5        # number of offspring == samplesize was 12
+# mu
+# weights      log # possible values: log (==default),
+                   #   lin (==linearely decreasing), or equal
+
+## -- Adaptation (distribution estimation) related parameters
+# diagonalCovarianceMatrix -1   # number of iterations, 1<==>always, -1<==>2+100*N/sqrt(lambda)
+# fac*damp      1  # increase or decrease damping for step size control.
+# ccumcov       1  # default is 4/(N+4), 1 means no cumulation for p_c.
+# mucov         1  # 1 means only rank 1 update of C
+# fac*ccov      1  # multiplier for default learning rate for cov. matrix
+
+
+## --- Syntax for input vectors xstart, sigma, mincoorstddev
+#
+#    N 7              # dimension must be defined before
+#    xstart 3 :       # read 3 numbers from next lines, the colon is superfluous
+#      0.2 0.3
+#      0.4 0.5 0.6
+#      0.7
+#
+# reads the first three numbers starting from the
+# line following the keyword "xstart" and recycles
+# these numbers (or cut them) to length N, resulting in
+#   xstart=[0.2 0.3 0.4 0.2 0.3 0.4 0.2]
+# No comments are allowed between the numbers. I.e.
+#
+#    xstart 3      22 anything here is ok, 22 is disregarded  # still ok
+#      0.2 0.3     # this comment fails, if >2 numbers to be read
+#      0.4 0.5 0.6
+#
+# would fail due to the comment between second and third number to
+# be read.
diff --git a/cpp_dnn/cmaes_signals.par b/cpp_dnn/cmaes_signals.par
new file mode 100644
index 0000000..e6536fb
--- /dev/null
+++ b/cpp_dnn/cmaes_signals.par
@@ -0,0 +1,77 @@
+#
+# Comment characters are '%' and '#' to end of line.
+# Uncomment one or more rows (and/or add an uncommented line)
+# and save this file to induce an action.
+#
+# Function cmaes_ReadSignals reads and interprets the syntax
+#   as given in this file
+#
+
+## --- modify termination condition, see also initials.par for more docu
+# stop now                # manual stop as soon as signals.par is parsed
+# stopMaxFunEvals  4.5e6  # stop after given number of function evaluations
+# stopMaxIter 3e3         # stop after given number of iterations (generations)
+# stopFitness 1e-6     # stop if function value is smaller than stopFitness
+# stopTolFun 1e-12     # stop if function value differences are small
+# stopTolFunHist 1e-12 # stop if f-value differences between best values are small
+# stopTolX 1e-1        # stop if step-sizes/steps in x-space are small
+# stopTolUpXFactor 1e3 # stop if std dev increases more than by TolUpXFactor
+
+# checkeigen  1        # number > 0 switches checking on, Check_Eigen() is O(n^3)!
+# maxTimeFractionForEigendecompostion 0.2
+
+# write resume allcmaes.dat  # write data for restart
+
+## --- print data to stdout
+##   syntax (in one row):
+##   print <keyword for cmaes_WriteToFilePtr()>[+<another keyword>]
+##         [<seconds>]
+##   After the first iteration ONLY the action with the smallest
+##     seconds value will take place.
+##   For more info see write data below.
+
+#  print gen+fitness    5
+## "few" prints Fevals Fval Sigma Max&MinCoorDev AxisRatio MinOfD
+#  print fewinfo     30 # print every n seconds
+#  print few+clock     2 # clock: used processor time since start
+  print few          2
+#  print fitness+xmean 3
+#  print gen+few  20
+#  print gen+few+few(diag(D)) 0
+#  print few(diag(D))
+#  print all 100
+
+## --- write data to file (example2.c can also write into data file)
+##  syntax (in one row):
+##  write <keyword for cmaes_WriteToFilePtr()>[+<another keyword>]
+##        [<filename>] [<seconds>]
+##   After the first iteration ONLY the action with the smallest
+##     seconds value will take place.
+
+##  Default filename is tmpcmaes.dat. Default is seconds=1,
+##  and during the first second or so it is 0 with a smooth
+##  writing gap transition until up to one second. For
+##  seconds=0 writing takes place every generation. For seconds < 0
+##  writing is blocked after the first key where seconds < 0 was
+##  written. Blocking lasts until all values for seconds are >=0
+##  again. For keywords compare cmaes_interface.h and function
+##  cmaes_WriteToFilePtr in cmaes.c.
+
+##        KEYWORD(s)                                  FILE          SECONDS to wait until next writing
+# write with default format for plotting
+write iter+eval+sigma+axisratio+fbestever+fitness+fmedian+fworst+mindii+idxmaxSD+maxSD+idxminSD+minSD   outcmaesfit.dat
+write iter+eval+sigma+axisratio+stddevratio+diag(D)       outcmaesaxlen.dat
+write iter+eval+sigma+idxmaxSD+idxminSD+stddev            outcmaesstddev.dat
+write iter+eval+sigma+0+0+xmean                           outcmaesxmean.dat
+write iter+eval+sigma+0+fitness+xbest                     outcmaesxrecentbest.dat
+
+##        KEYWORD(s)        FILE       SECONDS to wait until next writing
+
+# write few+few(diag(D)) rescmaes.dat     0    # writes every generation
+# write few+diag(D)      tmp.dat          0    # writes every generation
+# write few+few(diag(D)) rescmaes.dat          # writes once per second
+# write few+few(diag(D)) rescmaes.dat    -1    # writes once, blocks further writing
+# write gen+xbest          xcmaes.dat     2
+# write B                allcmaes.dat   100    # writes every 100 seconds
+# write all              allcmaes.dat   100
+# write gen+arfitness    tmpcmaes.dat     0
diff --git a/cpp_dnn/dnn.cpp b/cpp_dnn/dnn.cpp
index bd396fb..2f62ff2 100644
--- a/cpp_dnn/dnn.cpp
+++ b/cpp_dnn/dnn.cpp
@@ -474,30 +474,9 @@ namespace cpp_dnn {
                     this->sgd_step(lrate); 
                     
                 }
-                std::cout<<"Loss: "<< sum_loss<<std::endl;
+                // std::cout<<"Loss: "<< sum_loss<<std::endl;
                 
-                // for(var i=0; i < iters; i++){
-                //     var j= getRandomInt(N);
-                //     var Xt = X.slice([0,j], [D,1]);
-                //     var Yt = Y.slice([0,j], [D,1]);
-                //     var Ypred = this.forward(Xt);
-                //     sum_loss.add(sum_loss, this.loss.forward(Ypred, Yt));
-                //     var err = this.loss.backward();
-                //     this.backward(err);
-                //     this.sgd_step(lrate);
-                
-                // }
-                // D, N = X.shape
-                // for it in range(iters):
-                //     j = np.random.randint(N)
-                //     Xt = X[:,j:j+1]; Yt = Y[:,j:j+1]
-                //     print(Xt)
-                //     Ypred=self.forward( Xt)
-                //     l=self.loss.forward(Ypred, Yt)
-                //     delta=self.loss.backward()
-                //     b=self.backward( delta)
-                //     s=self.sgd_step( lrate)
-                //     }
+           
             }
             
         // private:
diff --git a/cpp_dnn/image.cpp b/cpp_dnn/image.cpp
index 0bb6dbe..21d060c 100644
--- a/cpp_dnn/image.cpp
+++ b/cpp_dnn/image.cpp
@@ -18,8 +18,8 @@ namespace cpp_dnn {
 
     class Image { 
         public:
-            scalar res=0.01;
-            scalar bound =3.0;
+            scalar res=0.05;
+            scalar bound =2.5;
             scalar minX;
             scalar maxX;
             scalar minY;
@@ -31,7 +31,7 @@ namespace cpp_dnn {
             int height;
             int width;
 
-            Image():res(0.01),bound(3.0){
+            Image():res(0.05),bound(2.5){
                 minX=-bound;
                 maxX=bound;
                 minY=-bound;
@@ -99,11 +99,23 @@ namespace cpp_dnn {
                 saveImage(predict(target.t()) ,"Target_"+ name);
                 return target.t();
             }
+            
+            int getHamming(const MatrixXI& Ypred,const MatrixXI& YY){
+                int d=0;
+                for(unsigned i=0;i<Ypred.size();i++){
+                    if((Ypred(i)>0.0 && YY(i)>0.0 )||(Ypred(i)<=0.0 && YY(i)<=0.0)){
+                    }else{
+                        d++;
+                    }
+                }
+                return d;
+            }
 
             void saveImage(const MatrixXI& Ypred,std::string name){
                 const int size=height*width*4;
                 int stride=0;
                 unsigned char pix[size];
+
     
                 for(unsigned i=0;i<Ypred.size();i++){
                     if(Ypred(i)>0.0){
@@ -123,7 +135,7 @@ namespace cpp_dnn {
 
                 ////////////////create image and save it//////////////////////////
                 cv::Mat image = cv::Mat(width, height, CV_8UC4, pix);
-                std::string fileName="img/"+name+".jpg";
+                std::string fileName="img_dnn/"+name+".png";
                 cv::imwrite( fileName, image );
                 bool preview=false;
                 if(preview){
diff --git a/cpp_dnn/main.cpp b/cpp_dnn/main.cpp
index badd39b..f2c6ac0 100644
--- a/cpp_dnn/main.cpp
+++ b/cpp_dnn/main.cpp
@@ -13,6 +13,8 @@
 using namespace cpp_dnn;
 using scalar=double;
 
+int COUNT=0;
+
 scalar getRandom(){//between 0 and 1
     return ((scalar) rand() / (RAND_MAX));
 }
@@ -45,333 +47,1235 @@ std::vector<scalar>  pointerToVector(double const *x, int N){
 
 // /* the objective (fitness) function to be minimized */
 double fitfun(double const *x, int N,MatrixX X,MatrixX Y,Sequential seq) { /* function "cigtab" */
+  Image Im;
+  MatrixX XX=Im.getLocMatrix();
   seq.setWeights( pointerToVector(x, N));
-  seq.step(X,Y);
-  return seq.sumLoss();
+  auto Ypred=seq.step(X,Y);
+  auto YY=Im.predict(Y);
+  double res=(double) Im.getHamming(Ypred,YY);
+  if(COUNT%100==0){
+    Im.saveImage(Ypred,std::to_string(COUNT)); //test
+    cout<<"iter:"<<COUNT<<" score:"<<res<<endl;
+
+  }
+  COUNT++;
+  
+  
+  return res;
 }
 
 //--------------------------------------------------------------------------------------------------
 int main(int const, char const**) {
 
-  // //Create network
-    // std::vector<Node*> network;
-
-    // Linear l1(2, 12);
-    // Tanh a1;
-
-    // Linear l2(12, 12);
-    // Tanh a2;
-
-    // Linear l3(12, 6);
-    // Tanh a3;
-
-    // Linear l4(6, 6);
-    // Tanh a4;
-
-    // Linear l5(6, 2);
-    // SoftMax a5;
-
-    // NLL l;
-    // network.push_back( &l1);
-    // network.push_back( &a1);
-    // network.push_back( &l2);
-    // network.push_back( &a2);
-    // network.push_back( &l3);
-    // network.push_back( &a3);
-    // network.push_back( &l4);
-    // network.push_back( &a4);
-    // network.push_back( &l5);
-    // network.push_back( &a5);
-
-    // Sequential seq(network, &l);
-
-    // Linear linear_1(2,3);
-    // scalar lrate = 0.005;
-    // // arma::Mat<double> a=arma::randu(2,2);
-
-    
-    // arma::Mat<scalar> X;
-    // arma::Mat<scalar> Y;
-    // X<< 2<<  3<< 9<< 12<<arma::endr
-    //  << 5<<  2<< 6<<  5<<arma::endr;
-    // Y<<0<< 1<< 0<< 1<<arma::endr
-    //  <<1<< 0<< 1<< 0<<arma::endr;
-    // // arma::Mat<scalar> dL_dz1;
-    // // dL_dz1<< 1.69467553e-09<<-1.33530535e-06<<  0.00000000e+00<<-0.00000000e+00<<arma::endr
-    // //       <<-5.24547376e-07<< 5.82459519e-04<< -3.84805202e-10<< 1.47943038e-09<<arma::endr
-    // //       <<-3.47063705e-02<< 2.55611604e-01<< -1.83538094e-02<< 1.11838432e-04<<arma::endr;
-
-    // // std::cout << linear_1.forward(X) << '\n';
-    // // std::cout << linear_1.backward(dL_dz1) << '\n';
-    // // linear_1.sgd_step(lrate);
-    // // std::cout << linear_1._W << '\n';
-    // // std::cout << linear_1._W0 << '\n';
+  scalar res=0.05f;
+    scalar bound =2.5f;
 
 
-
-    // std::cout << arma::index_max(Y,0) << '\n';
-    // std::vector<Node*> network;
-    // Linear l1(2, 3);
-    // ReLU t;
-    // Linear l2(3, 2);
-    // SoftMax s;
-    // NLL l;
-    // network.push_back( &l1);
-    // network.push_back( &t);
-    // network.push_back( &l2);
-    // network.push_back( &s);
-
-    // arma::Mat<scalar> z_1 = l1.forward(X);
-
-    // std::cout << z_1 << '\n';
-
-    // arma::Mat<scalar> a_1 = t.forward(z_1);
-
-    // std::cout << a_1 << '\n';
-
-    // arma::Mat<scalar> z_2;
-
-    // // z_2 <<0.40837833<<0.53900088<< 0.56956001<< 0.57209377<<arma::endr
-    // //      << -0.66368766<< 0.65353931<< 0.96361427<< 0.98919526<<arma::endr;
-
-
-    // z_2<<5.28714248<< 3.64078533<< 10.92235599<< 12.36410102<<arma::endr
-    //    <<  0.78906625<< 0.80620366<< 2.41861097<<4.44170662<<arma::endr;
     
-    // // arma::Mat<scalar> z_2 = l2.forward(a_1);
+    scalar minX=-bound;
+    scalar maxX=bound;
+    scalar minY=-bound;
+    scalar maxY=bound;
+    scalar dx=res;
+    scalar dy=res;
+    int height=(int)((maxX-minX)/dx);
+    int width=(int)((maxY-minY)/dy);
 
-    // // std::cout << z_2 << '\n';
+    cout<<"width: "<<width<<", height: "<<height <<std::endl;
 
     
-    // arma::Mat<scalar> a_2 = s.forward(z_2);
+    //Create Image
+    Image Im;
+    MatrixX X=Im.getLocMatrix();
 
-    // std::cout << a_2 << '\n';
     
     
-
-    // arma::Mat<scalar> loss = l.forward(a_2, Y);
-
-    // std::cout << loss<< '\n';
-
-    // arma::Mat<scalar> dloss = l.backward();
-
-    // std::cout << dloss<< '\n';
-
-    // arma::Mat<scalar>  dL_dz2 = s.backward(dloss);
-
-    // std::cout << dL_dz2<< '\n';
-  
-    // arma::Mat<scalar> dL_da1;
-
-    // // dL_da1<<0.47375374<< -0.3361494<< 0.25611147<<-0.38332583<<arma::endr
-    // // <<-0.2210031<< 0.15681155<< -0.11947437<< 0.17881905<<arma::endr
-    // // <<-0.56355604<< 0.39986813<< -0.30465863<< 0.45598708<<arma::endr;
-
-    // dL_da1<< 6.28919807e-01<< -3.52832568e-02<<  6.35791049e-01<< -2.30458563e-04<<arma::endr
-    // <<-2.93387075e-01<<  1.64594141e-02<< -2.96592466e-01<<  1.07507449e-04<<arma::endr
-    // <<-7.48134578e-01<<  4.19713676e-02<< -7.56308297e-01<<  2.74143091e-04<<arma::endr;
-
-    // std::cout << dL_da1<< '\n';
-
-    // // dL_da1 = linear_2.backward(dL_dz2)
+    cpp_frep::Circle c(1.5f,0.0f,0.0f);
+    // std::vector<unsigned char> targ1 =drawFrep(&c,minX, maxX, minY, maxY, dx, dy,"circle_target",false);
+    MatrixX targ1=Im.getTarget( &c,"circle");
+
+    cpp_frep::Rectangle r(-1.5f,1.5f,-1.0f,1.0f);
+    cpp_frep::Rotate rot1 (&r,0.0f,0.0f,90.0f);
+    // std::vector<unsigned char> targ2 =drawFrep(&rot1,minX, maxX, minY, maxY, dx, dy,"rectange_target",false);
+    MatrixX targ2=Im.getTarget( &rot1,"rectange");
+
+    cpp_frep::InvoluteGear gear( 1.0f,  1.0f, 1.1f, 20.0f, 8.0f) ;
+    cpp_frep::Rotate rot (&gear,0.0f,0.0f,15.0f);
+    cpp_frep::Scale sc1(&rot,0.0f,0.0f,0.5f,0.5f);
+    cpp_frep::Add target(&sc1,&c);
+    // std::vector<unsigned char> targ3 =drawFrep(&target,minX, maxX, minY, maxY, dx, dy,"gear_target",false);
+    MatrixX targ3=Im.getTarget( &target,"gear");
+
+
+    cpp_frep::Circle c1(0.9f,-0.5f,0.8f);
+    cpp_frep::Circle c2(0.8f,0.2f,-0.2f);
+    cpp_frep::Circle c3(0.9f,1.5f,0.0f);
+    cpp_frep::Circle c4(0.9f,1.7f,-1.1f);
+    // Subtract ss(&rot1,&c1);
     
+    // Subtract sss(&ss,&c2);
+    cpp_frep::Add aa(&c1,&c3);
+    cpp_frep::Add aaa(&aa,&c2);
+    cpp_frep::Add a(&aaa,&c4);
+    cpp_frep::Morph m (&a,&target,0.6f);
+    cpp_frep::Rotate rot2 (&m,0.3f,0.0f,-90.0f);
+    // Scale scc (&m,0.0f,0.0f,1.0,1.0);
+    // std::vector<unsigned char> targ4 =drawFrep(&rot2,minX, maxX, minY, maxY, dx, dy,"blob_target",false);
+    MatrixX targ4=Im.getTarget( &rot2,"blob");
+
+    cpp_frep::Circle c5(0.5f,0.0f,0.0f);
+    cpp_frep::Subtract ss(&c,&c5);
+    // std::vector<unsigned char> targ5 =drawFrep(&ss,minX, maxX, minY, maxY, dx, dy,"hole_target",false);
+    MatrixX targ5=Im.getTarget( &ss,"hole");
+
+    ////////////////////////////////////////////////////
+
+    //Create network
+    std::vector<Node*> network;
 
-    // arma::Mat<scalar> dL_dz1 = t.backward(dL_da1);
-
-    // std::cout << dL_dz1<< '\n';
-
-    // arma::Mat<scalar> dL_dX = l1.backward(dL_dz1);
-
-    // std::cout << dL_dX<< '\n';
-
-    // l1.sgd_step(lrate);
-    // std::cout << l1._W << '\n';
-    // std::cout << l1._W0 << '\n';
-
-    // l1.sgd_step(lrate);
-    // std::cout << l1._W << '\n';
-    // std::cout << l1._W0 << '\n';
-
-    // dL_dX = linear_1.backward(dL_dz1)
-    // unit_test('dL_dX', test_values['dL_dX'], dL_dX)
-
-    // Sequential seq(network, &l);
-    // std::cout <<seq.getWeightsNum()<<'\n';
-    // std::cout <<seq.step(X,Y)<< '\n';
-
+    Linear l1(2, 12);
+    Tanh a1;
 
-    // std::vector<Node*> network;
-    // Linear l1(2, 3);
-    // Sigmoid r;
-    // Linear l2(3, 3);
-    // Tanh t;
-    // Tanh t1;
-    // Linear l3(3, 2);
-    // SoftMax s;
-    // NLL l;
-    // network.push_back( &l1);
-    // network.push_back( &r);
-    // // network.push_back( &l2);
-    // // network.push_back( &t1);
-    // network.push_back( &l3);
-    // network.push_back( &s);
+    Linear l2(12, 12);
+    ReLU a2;
 
-    // Sequential seq(network, &l);
-    // std::cout <<seq.getWeightsNum()<<'\n';
-    // std::cout <<seq.step(X,Y)<< '\n';
-    arma::Mat<scalar> X;
-    arma::Mat<scalar> Y;
+    Linear l3(12, 6);
+    ReLU a3;
 
-    X <<-0.23390341<< 1.18151883<< -2.46493986<< 1.55322202<< 1.27621763<< 2.39710997<< -1.3440304<< -0.46903436<< -0.64673502<< -1.44029872<<
-        -1.37537243<< 1.05994811<< -0.93311512<< 1.02735575<< -0.84138778<<-2.22585412<< -0.42591102<< 1.03561105<< 0.91125595<< -2.26550369<<arma::endr <<
-        -0.92254932<< -1.1030963<< -2.41956036<< -1.15509002<< -1.04805327<< 0.08717325<< 0.8184725<< -0.75171045<< 0.60664705<< 0.80410947<<
-        -0.11600488<< 1.03747218<< -0.67210575<< 0.99944446<< -0.65559838<<-0.40744784<< -0.58367642<< 1.0597278<< -0.95991874<< -1.41720255<<arma::endr;
+    Linear l4(6, 6);
+    Tanh a4;
 
-    Y <<1.<< 1.<< 0.<< 1.<< 1.<< 1.<< 0.<< 0.<< 0.<< 0.<< 0.<< 1.<< 1.<< 1.<< 0.<< 0.<< 0.<< 1.<< 1.<< 0.<<arma::endr
-      <<0.<< 0.<< 1.<< 0.<< 0.<< 0.<< 1.<< 1.<< 1.<< 1.<< 1.<< 0.<< 0.<< 0.<< 1.<< 1.<< 1.<< 0.<< 0.<< 1.<<arma::endr;
+    Linear l5(6, 2);
+    SoftMax a5;
 
-    std::vector<Node*> network;
-    Linear l1(2, 10);
-    ReLU r1;
-    Linear l2(10, 10);
-    ReLU r2;
-    Linear l3(10, 2);
-    SoftMax s;
     NLL l;
     network.push_back( &l1);
-    network.push_back( &r1);
+    network.push_back( &a1);
     network.push_back( &l2);
-    network.push_back( &r2);
+    network.push_back( &a2);
     network.push_back( &l3);
-    network.push_back( &s);
+    network.push_back( &a3);
+    network.push_back( &l4);
+    network.push_back( &a4);
+    network.push_back( &l5);
+    network.push_back( &a5);
 
-    Sequential nn(network, &l);
+    Sequential seq(network, &l);
 
-    // Sequential([Linear(2, 10), ReLU(), Linear(10, 10), ReLU(), Linear(10,2), SoftMax()], NLL())
+    ///////TARGET/////
+    MatrixX Y=targ5; /////////////////////////////////////////////target
+    Im.saveImage(seq.step(X,Y),"trial"); //test
 
+    std::cout<<"Number of Weights:"<<(int)seq.getWeightsNum()<<std::endl;
+
+    // ///////////////////////////// //Optimize neldermead
+    // unsigned numWeights=seq.getWeightsNum();
+    auto YY=Im.predict(Y);
+
+
+    ///////SGD/////
+
+    // unsigned epoch=2500;
+    // unsigned it=1000;//10000
+    // scalar lrate = 0.005;
+    // for (unsigned i=0;i<epoch;i++){
+    //   if(i%25==0){
+    //     auto Ypred=seq.step(X,Y);
+    //     Im.saveImage(Ypred,std::to_string(i)); //test
+    //     std::cout<<"iter:"<<i<<" score:"<<Im.getHamming(Ypred,YY)<<std::endl;
+    //   }
+    //   seq.sgd(X, Y, it, lrate);
+    // }
     
-    unsigned it=10000;
-    unsigned D= X.n_rows;
-    unsigned N= X.n_cols;
-    unsigned O= Y.n_rows;
 
-    scalar lrate = 0.005;
+    
     // Modifies the weights and biases
-    nn.sgd(X, Y, it, lrate);
-
-    // Draw it...
     
-    cout<<nn.predict(nn.forward(X))<<endl;
 
+    ////cmaes//
+    cmaes_t evo; /* an CMA-ES type struct or "object" */
+    double *arFunvals, *const*pop, *xfinal;
+    int i; 
+    arFunvals = cmaes_init(&evo, 5, NULL, NULL, 0, 0, "cpp_dnn/cmaes_initials.par");
+    printf("%s\n", cmaes_SayHello(&evo));
+     
+    cmaes_ReadSignals(&evo, "cmaes_signals.par");  /* write header and initial values */
+
+    /* Iterate until stop criterion holds */
+    while(!cmaes_TestForTermination(&evo))
+    { 
+      /* generate lambda new search points, sample population */
+      pop = cmaes_SamplePopulation(&evo); /* do not change content of pop */
+
+      /* Here we may resample each solution point pop[i] until it
+	 	 becomes feasible. function is_feasible(...) needs to be
+	 	 user-defined.
+	 	 Assumptions: the feasible domain is convex, the optimum is
+	 	 not on (or very close to) the domain boundary, initialX is
+	 	 feasible and initialStandardDeviations are sufficiently small
+	 	 to prevent quasi-infinite looping. */
+      /* for (i = 0; i < cmaes_Get(&evo, "popsize"); ++i)
+           while (!is_feasible(pop[i]))
+             cmaes_ReSampleSingle(&evo, i);
+      */
+
+      /* evaluate the new search points using fitfun */
+      for (i = 0; i < cmaes_Get(&evo, "lambda"); ++i) {
+    	  arFunvals[i] = fitfun(pop[i], (int) cmaes_Get(&evo, "dim"),X,Y,seq);
+      }
+
+      /* update the search distribution used for cmaes_SamplePopulation() */
+      cmaes_UpdateDistribution(&evo, arFunvals);  
+
+      /* read instructions for printing output or changing termination conditions */ 
+      cmaes_ReadSignals(&evo, "cmaes_signals.par");
+      fflush(stdout); /* useful in MinGW */
+    }
+    printf("Stop:\n%s\n",  cmaes_TestForTermination(&evo)); /* print termination reason */
+    cmaes_WriteToFile(&evo, "all", "allcmaes.dat");         /* write final results */
 
-    cout<<"hereeee "<<endl;
+    /* get best estimator for the optimum, xmean */
+    xfinal = cmaes_GetNew(&evo, "xmean"); /* "xbestever" might be used as well */
+    cmaes_exit(&evo); /* release memory */ 
 
+    /* do something with final solution and finally release memory */
+    std::cout<<*xfinal<<'\n';
     
-    // X = np.array([[2, 3, 9, 12],
-    //               [5, 1, 6, 5]])
-
-    // y = np.array([[1, 0, 1, 0]])
-    // return X, for_softmax(y)
+    free(xfinal); 
 
+    seq.setWeights( pointerToVector(pop[0], (int) cmaes_Get(&evo, "dim")));
+    Im.saveImage(seq.step(X,Y),"trialll");
     
 
 
+
+
+    
   
     return 0;
 }
 
-// void oldCode(){
-//   //Create Image
-//   Image Im;
-//   MatrixX X=Im.getLocMatrix();
-//   cpp_frep::Circle frep(1.5f,0.0f,0.0f);
-//   MatrixX Y=Im.getTarget( &frep ,"Circle");
-//   // Im.saveImage(seq.step(X,Y),"trial"); //test
-
-//   ///////////////////////////// //Optimize neldermead
-//   unsigned numWeights=seq.getWeightsNum();
-
-//   // std::vector<scalar> v=getRandomWeights(numWeights);
-//   // std::cout << seq.sumLoss()<< '\n';
-//   // seq.setWeights(v);
-//   // Im.saveImage(seq.step(X,Y),"trial1"); //test
-//   // std::cout << seq.sumLoss()<< '\n';
-
-
-//   // float precision = 0.001;
-//   // int dimension = (int)numWeights;
-//   // unsigned maxSteps=1000;
-//   // NelderMeadOptimizer o(dimension, precision);
-//   // std::cout << dimension<< '\n';
-
-//   // request a simplex to start with
-//   // Vector v(getRandomWeights(numWeights));
-//   // Vector v1(getRandomWeights(numWeights));
-//   // Vector v2(getRandomWeights(numWeights));
-//   // o.insert(v);
-//   // o.insert(v1);
-//   // o.insert(v2);
-//   // unsigned count=0;
-
-//   // while (!o.done() && count<maxSteps) {
-//   //     seq.setWeights(v.get());
-//   //     Im.saveImage(seq.step(X,Y),"trial"+std::to_string(count));
-//   //     v = o.step(v, -seq.sumLoss()); //later change f(v)
-//   //     count++;
-
-//   // }
-
-//   ///////////////////////////// //Optimize CMAES
-//   cmaes_t evo; /* an CMA-ES type struct or "object" */
-//   double *arFunvals, *const*pop, *xfinal;
-//   int i; 
-//   arFunvals = cmaes_init(&evo, 5, NULL, NULL, 0, 0, "cpp_dnn/cmaes_initials.par");
-//   printf("%s\n", cmaes_SayHello(&evo));
-
-//   cmaes_ReadSignals(&evo, "cmaes_signals.par");  /* write header and initial values */
-
-//   /* Iterate until stop criterion holds */
-//   while(!cmaes_TestForTermination(&evo))
-//   { 
-//     /* generate lambda new search points, sample population */
-//     pop = cmaes_SamplePopulation(&evo); /* do not change content of pop */
-
-//     /* Here we may resample each solution point pop[i] until it
-//   becomes feasible. function is_feasible(...) needs to be
-//   user-defined.
-//   Assumptions: the feasible domain is convex, the optimum is
-//   not on (or very close to) the domain boundary, initialX is
-//   feasible and initialStandardDeviations are sufficiently small
-//   to prevent quasi-infinite looping. */
-//     /* for (i = 0; i < cmaes_Get(&evo, "popsize"); ++i)
-//         while (!is_feasible(pop[i]))
-//           cmaes_ReSampleSingle(&evo, i);
-//     */
-
-//     /* evaluate the new search points using fitfun */
-//     for (i = 0; i < cmaes_Get(&evo, "lambda"); ++i) {
-//       arFunvals[i] = fitfun(pop[i], (int) cmaes_Get(&evo, "dim"),X,Y,seq);
-//     }
-
-//     /* update the search distribution used for cmaes_SamplePopulation() */
-//     cmaes_UpdateDistribution(&evo, arFunvals);  
-
-//     /* read instructions for printing output or changing termination conditions */ 
-//     cmaes_ReadSignals(&evo, "cmaes_signals.par");
-//     fflush(stdout); /* useful in MinGW */
-//   }
-//   printf("Stop:\n%s\n",  cmaes_TestForTermination(&evo)); /* print termination reason */
-//   cmaes_WriteToFile(&evo, "all", "allcmaes.dat");         /* write final results */
-
-//   /* get best estimator for the optimum, xmean */
-//   xfinal = cmaes_GetNew(&evo, "xmean"); /* "xbestever" might be used as well */
-//   cmaes_exit(&evo); /* release memory */ 
-
-//   /* do something with final solution and finally release memory */
-//   std::cout<<*xfinal<<'\n';
-
-//   free(xfinal); 
-//   seq.setWeights( pointerToVector(pop[0], (int) cmaes_Get(&evo, "dim")));
-//   Im.saveImage(seq.step(X,Y),"trialll");
-  
-// } 
+//dnn_sgd target 1
+  //   iter:0 score:7266
+  // iter:25 score:286
+  // iter:50 score:302
+  // iter:75 score:182
+  // iter:100 score:264
+  // iter:125 score:390
+  // iter:150 score:83
+  // iter:175 score:125
+  // iter:200 score:187
+  // iter:225 score:189
+  // iter:250 score:188
+  // iter:275 score:164
+  // iter:300 score:151
+  // iter:325 score:98
+  // iter:350 score:74
+  // iter:375 score:118
+  // iter:400 score:175
+  // iter:425 score:59
+  // iter:450 score:103
+  // iter:475 score:126
+  // iter:500 score:88
+  // iter:525 score:79
+  // iter:550 score:110
+  // iter:575 score:98
+  // iter:600 score:126
+  // iter:625 score:153
+  // iter:650 score:149
+  // iter:675 score:76
+  // iter:700 score:65
+  // iter:725 score:70
+  // iter:750 score:76
+  // iter:775 score:50
+  // iter:800 score:68
+  // iter:825 score:89
+  // iter:850 score:141
+  // iter:875 score:142
+  // iter:900 score:154
+  // iter:925 score:47
+  // iter:950 score:75
+  // iter:975 score:108
+  // iter:1000 score:53
+  // iter:1025 score:69
+  // iter:1050 score:120
+  // iter:1075 score:62
+  // iter:1100 score:70
+  // iter:1125 score:59
+  // iter:1150 score:122
+  // iter:1175 score:107
+  // iter:1200 score:84
+  // iter:1225 score:77
+  // iter:1250 score:67
+  // iter:1275 score:86
+  // iter:1300 score:76
+  // iter:1325 score:139
+  // iter:1350 score:43
+  // iter:1375 score:119
+  // iter:1400 score:113
+  // iter:1425 score:68
+  // iter:1450 score:63
+  // iter:1475 score:44
+  // iter:1500 score:163
+  // iter:1525 score:50
+  // iter:1550 score:118
+  // iter:1575 score:65
+  // iter:1600 score:72
+  // iter:1625 score:93
+  // iter:1650 score:33
+  // iter:1675 score:44
+  // iter:1700 score:52
+  // iter:1725 score:107
+  // iter:1750 score:67
+  // iter:1775 score:34
+  // iter:1800 score:66
+  // iter:1825 score:81
+  // iter:1850 score:47
+  // iter:1875 score:43
+  // iter:1900 score:63
+  // iter:1925 score:45
+  // iter:1950 score:43
+  // iter:1975 score:79
+  // iter:2000 score:53
+  // iter:2025 score:63
+  // iter:2050 score:52
+  // iter:2075 score:83
+  // iter:2100 score:62
+  // iter:2125 score:90
+  // iter:2150 score:61
+  // iter:2175 score:95
+  // iter:2200 score:77
+  // iter:2225 score:79
+  // iter:2250 score:85
+  // iter:2275 score:57
+  // iter:2300 score:89
+  // iter:2325 score:36
+  // iter:2350 score:56
+  // iter:2375 score:30
+  // iter:2400 score:54
+  // iter:2425 score:140
+  // iter:2450 score:52
+  // iter:2475 score:69
+//dnn_sgd target 2
+  //   Number of Weights:326
+  // iter:0 score:7760
+  // iter:25 score:459
+  // iter:50 score:270
+  // iter:75 score:344
+  // iter:100 score:142
+  // iter:125 score:138
+  // iter:150 score:203
+  // iter:175 score:264
+  // iter:200 score:137
+  // iter:225 score:98
+  // iter:250 score:84
+  // iter:275 score:202
+  // iter:300 score:134
+  // iter:325 score:106
+  // iter:350 score:62
+  // iter:375 score:88
+  // iter:400 score:133
+  // iter:425 score:106
+  // iter:450 score:91
+  // iter:475 score:227
+  // iter:500 score:201
+  // iter:525 score:141
+  // iter:550 score:90
+  // iter:575 score:36
+  // iter:600 score:105
+  // iter:625 score:106
+  // iter:650 score:80
+  // iter:675 score:67
+  // iter:700 score:26
+  // iter:725 score:59
+  // iter:750 score:69
+  // iter:775 score:45
+  // iter:800 score:85
+  // iter:825 score:97
+  // iter:850 score:32
+  // iter:875 score:42
+  // iter:900 score:109
+  // iter:925 score:43
+  // iter:950 score:77
+  // iter:975 score:59
+  // iter:1000 score:73
+  // iter:1025 score:68
+  // iter:1050 score:101
+  // iter:1075 score:105
+  // iter:1100 score:46
+  // iter:1125 score:19
+  // iter:1150 score:96
+  // iter:1175 score:36
+  // iter:1200 score:56
+  // iter:1225 score:35
+  // iter:1250 score:32
+  // iter:1275 score:64
+  // iter:1300 score:70
+  // iter:1325 score:33
+  // iter:1350 score:20
+  // iter:1375 score:43
+  // iter:1400 score:35
+  // iter:1425 score:19
+  // iter:1450 score:33
+  // iter:1475 score:27
+  // iter:1500 score:18
+  // iter:1525 score:47
+  // iter:1550 score:16
+  // iter:1575 score:19
+  // iter:1600 score:6
+  // iter:1625 score:32
+  // iter:1650 score:16
+  // iter:1675 score:61
+  // iter:1700 score:22
+  // iter:1725 score:8
+  // iter:1750 score:15
+  // iter:1775 score:23
+  // iter:1800 score:10
+  // iter:1825 score:6
+  // iter:1850 score:29
+  // iter:1875 score:21
+  // iter:1900 score:10
+  // iter:1925 score:9
+  // iter:1950 score:4
+  // iter:1975 score:5
+  // iter:2000 score:23
+  // iter:2025 score:67
+  // iter:2050 score:111
+  // iter:2075 score:34
+  // iter:2100 score:6
+  // iter:2125 score:29
+  // iter:2150 score:18
+  // iter:2175 score:48
+  // iter:2200 score:5
+  // iter:2225 score:12
+  // iter:2250 score:10
+  // iter:2275 score:24
+  // iter:2300 score:14
+  // iter:2325 score:1
+  // iter:2350 score:8
+  // iter:2375 score:2
+  // iter:2400 score:17
+  // iter:2425 score:20
+  // iter:2450 score:3
+  // iter:2475 score:5
+//dnn_sgd target 3
+  // Number of Weights:326
+  // iter:0 score:5168
+  // iter:25 score:1175
+  // iter:50 score:1110
+  // iter:75 score:1031
+  // iter:100 score:1106
+  // iter:125 score:872
+  // iter:150 score:989
+  // iter:175 score:745
+  // iter:200 score:905
+  // iter:225 score:825
+  // iter:250 score:665
+  // iter:275 score:694
+  // iter:300 score:903
+  // iter:325 score:692
+  // iter:350 score:792
+  // iter:375 score:767
+  // iter:400 score:695
+  // iter:425 score:633
+  // iter:450 score:699
+  // iter:475 score:719
+  // iter:500 score:642
+  // iter:525 score:704
+  // iter:550 score:634
+  // iter:575 score:547
+  // iter:600 score:581
+  // iter:625 score:541
+  // iter:650 score:723
+  // iter:675 score:610
+  // iter:700 score:658
+  // iter:725 score:595
+  // iter:750 score:595
+  // iter:775 score:669
+  // iter:800 score:672
+  // iter:825 score:723
+  // iter:850 score:834
+  // iter:875 score:593
+  // iter:900 score:609
+  // iter:925 score:582
+  // iter:950 score:592
+  // iter:975 score:511
+  // iter:1000 score:579
+  // iter:1025 score:537
+  // iter:1050 score:536
+  // iter:1075 score:512
+  // iter:1100 score:606
+  // iter:1125 score:571
+  // iter:1150 score:532
+  // iter:1175 score:607
+  // iter:1200 score:606
+  // iter:1225 score:496
+  // iter:1250 score:492
+  // iter:1275 score:583
+  // iter:1300 score:621
+  // iter:1325 score:521
+  // iter:1350 score:672
+  // iter:1375 score:643
+  // iter:1400 score:607
+  // iter:1425 score:551
+  // iter:1450 score:540
+  // iter:1475 score:573
+  // iter:1500 score:622
+  // iter:1525 score:499
+  // iter:1550 score:510
+  // iter:1575 score:584
+  // iter:1600 score:542
+  // iter:1625 score:541
+  // iter:1650 score:573
+  // iter:1675 score:607
+  // iter:1700 score:546
+  // iter:1725 score:661
+  // iter:1750 score:548
+  // iter:1775 score:533
+  // iter:1800 score:695
+  // iter:1825 score:592
+  // iter:1850 score:553
+  // iter:1875 score:557
+  // iter:1900 score:590
+  // iter:1925 score:515
+  // iter:1950 score:559
+  // iter:1975 score:514
+  // iter:2000 score:490
+  // iter:2025 score:539
+  // iter:2050 score:591
+  // iter:2075 score:517
+  // iter:2100 score:547
+  // iter:2125 score:560
+  // iter:2150 score:554
+  // iter:2175 score:468
+  // iter:2200 score:547
+  // iter:2225 score:559
+  // iter:2250 score:551
+  // iter:2275 score:651
+  // iter:2300 score:582
+  // iter:2325 score:617
+  // iter:2350 score:606
+  // iter:2375 score:550
+  // iter:2400 score:506
+  // iter:2425 score:837
+  // iter:2450 score:534
+  // iter:2475 score:566
+//dnn_sgd target 4
+  //   width: 99, height: 99
+  // Number of Weights:326
+  // iter:0 score:6479
+  // iter:25 score:484
+  // iter:50 score:220
+  // iter:75 score:244
+  // iter:100 score:350
+  // iter:125 score:325
+  // iter:150 score:374
+  // iter:175 score:303
+  // iter:200 score:425
+  // iter:225 score:184
+  // iter:250 score:248
+  // iter:275 score:229
+  // iter:300 score:197
+  // iter:325 score:252
+  // iter:350 score:316
+  // iter:375 score:222
+  // iter:400 score:194
+  // iter:425 score:134
+  // iter:450 score:201
+  // iter:475 score:146
+  // iter:500 score:166
+  // iter:525 score:187
+  // iter:550 score:198
+  // iter:575 score:237
+  // iter:600 score:185
+  // iter:625 score:154
+  // iter:650 score:173
+  // iter:675 score:364
+  // iter:700 score:155
+  // iter:725 score:381
+  // iter:750 score:165
+  // iter:775 score:224
+  // iter:800 score:169
+  // iter:825 score:157
+  // iter:850 score:182
+  // iter:875 score:163
+  // iter:900 score:154
+  // iter:925 score:143
+  // iter:950 score:201
+  // iter:975 score:291
+  // iter:1000 score:198
+  // iter:1025 score:161
+  // iter:1050 score:131
+  // iter:1075 score:188
+  // iter:1100 score:185
+  // iter:1125 score:132
+  // iter:1150 score:144
+  // iter:1175 score:217
+  // iter:1200 score:210
+  // iter:1225 score:160
+  // iter:1250 score:183
+  // iter:1275 score:202
+  // iter:1300 score:257
+  // iter:1325 score:210
+  // iter:1350 score:163
+  // iter:1375 score:118
+  // iter:1400 score:197
+  // iter:1425 score:160
+  // iter:1450 score:158
+  // iter:1475 score:166
+  // iter:1500 score:154
+  // iter:1525 score:162
+  // iter:1550 score:211
+  // iter:1575 score:150
+  // iter:1600 score:164
+  // iter:1625 score:193
+  // iter:1650 score:123
+  // iter:1675 score:146
+  // iter:1700 score:105
+  // iter:1725 score:185
+  // iter:1750 score:234
+  // iter:1775 score:101
+  // iter:1800 score:136
+  // iter:1825 score:122
+  // iter:1850 score:115
+  // iter:1875 score:199
+  // iter:1900 score:121
+  // iter:1925 score:130
+  // iter:1950 score:180
+  // iter:1975 score:85
+  // iter:2000 score:154
+  // iter:2025 score:154
+  // iter:2050 score:155
+  // iter:2075 score:161
+  // iter:2100 score:169
+  // iter:2125 score:132
+  // iter:2150 score:165
+  // iter:2175 score:126
+  // iter:2200 score:123
+  // iter:2225 score:115
+  // iter:2250 score:143
+  // iter:2275 score:145
+  // iter:2300 score:166
+  // iter:2325 score:119
+  // iter:2350 score:252
+  // iter:2375 score:85
+  // iter:2400 score:128
+  // iter:2425 score:151
+  // iter:2450 score:160
+  // iter:2475 score:119
+//dnn_sgd target 5
+  // Number of Weights:326
+  // iter:0 score:7535
+  // iter:25 score:516
+  // iter:50 score:376
+  // iter:75 score:350
+  // iter:100 score:295
+  // iter:125 score:301
+  // iter:150 score:218
+  // iter:175 score:255
+  // iter:200 score:196
+  // iter:225 score:249
+  // iter:250 score:195
+  // iter:275 score:164
+  // iter:300 score:176
+  // iter:325 score:209
+  // iter:350 score:225
+  // iter:375 score:157
+  // iter:400 score:183
+  // iter:425 score:188
+  // iter:450 score:182
+  // iter:475 score:244
+  // iter:500 score:81
+  // iter:525 score:84
+  // iter:550 score:122
+  // iter:575 score:121
+  // iter:600 score:150
+  // iter:625 score:162
+  // iter:650 score:209
+  // iter:675 score:244
+  // iter:700 score:135
+  // iter:725 score:93
+  // iter:750 score:117
+  // iter:775 score:78
+  // iter:800 score:114
+  // iter:825 score:112
+  // iter:850 score:131
+  // iter:875 score:183
+  // iter:900 score:145
+  // iter:925 score:113
+  // iter:950 score:96
+  // iter:975 score:87
+  // iter:1000 score:88
+  // iter:1025 score:112
+  // iter:1050 score:104
+  // iter:1075 score:110
+  // iter:1100 score:92
+  // iter:1125 score:131
+  // iter:1150 score:97
+  // iter:1175 score:176
+  // iter:1200 score:110
+  // iter:1225 score:93
+  // iter:1250 score:114
+  // iter:1275 score:73
+  // iter:1300 score:90
+  // iter:1325 score:117
+  // iter:1350 score:97
+  // iter:1375 score:163
+  // iter:1400 score:166
+  // iter:1425 score:111
+  // iter:1450 score:102
+  // iter:1475 score:117
+  // iter:1500 score:88
+  // iter:1525 score:78
+  // iter:1550 score:119
+  // iter:1575 score:92
+  // iter:1600 score:115
+  // iter:1625 score:169
+  // iter:1650 score:71
+  // iter:1675 score:77
+  // iter:1700 score:92
+  // iter:1725 score:100
+  // iter:1750 score:117
+  // iter:1775 score:81
+  // iter:1800 score:97
+  // iter:1825 score:93
+  // iter:1850 score:79
+  // iter:1875 score:84
+  // iter:1900 score:82
+  // iter:1925 score:86
+  // iter:1950 score:87
+  // iter:1975 score:119
+  // iter:2000 score:106
+  // iter:2025 score:124
+  // iter:2050 score:90
+  // iter:2075 score:111
+  // iter:2100 score:132
+  // iter:2125 score:78
+  // iter:2150 score:68
+  // iter:2175 score:98
+  // iter:2200 score:102
+  // iter:2225 score:86
+  // iter:2250 score:91
+  // iter:2275 score:84
+  // iter:2300 score:95
+  // iter:2325 score:78
+  // iter:2350 score:105
+  // iter:2375 score:68
+  // iter:2400 score:152
+  // iter:2425 score:82
+  // iter:2450 score:83
+  // iter:2475 score:103
+
+
+//dnn_cmaes target 1
+  // iter:0 score:7191
+  // iter:100 score:2809
+  // iter:200 score:2809
+  // iter:300 score:3091
+  // iter:400 score:3515
+  // iter:500 score:2859
+  // iter:600 score:2629
+  // iter:700 score:1527
+  // iter:800 score:1445
+  // iter:900 score:1498
+  // iter:1000 score:2193
+  // iter:1100 score:2199
+  // iter:1200 score:1046
+  // iter:1300 score:1008
+  // iter:1400 score:1141
+  // iter:1500 score:1034
+  // iter:1600 score:1113
+  // iter:1700 score:908
+  // iter:1800 score:1668
+  // iter:1900 score:1101
+  // iter:2000 score:870
+  // iter:2100 score:652
+  // iter:2200 score:1490
+  // iter:2300 score:1479
+  // iter:2400 score:725
+  // iter:2500 score:797
+  // iter:2600 score:744
+  // iter:2700 score:556
+  // iter:2800 score:849
+  // iter:2900 score:1052
+  // iter:3000 score:2033
+  // iter:3100 score:889
+  // iter:3200 score:949
+  // iter:3300 score:1250
+  // iter:3400 score:649
+  // iter:3500 score:862
+  // iter:3600 score:1601
+  // iter:3700 score:503
+  // iter:3800 score:453
+  // iter:3900 score:456
+  // iter:4000 score:555
+  // iter:4100 score:915
+  // iter:4200 score:616
+  // iter:4300 score:561
+  // iter:4400 score:1006
+  // iter:4500 score:480
+  // iter:4600 score:541
+  // iter:4700 score:442
+  // iter:4800 score:433
+  // iter:4900 score:535
+  // iter:5000 score:1155
+  // iter:5100 score:445
+  // iter:5200 score:505
+  // iter:5300 score:523
+  // iter:5400 score:560
+  // iter:5500 score:489
+  // iter:5600 score:569
+  // iter:5700 score:425
+  // iter:5800 score:958
+  // iter:5900 score:543
+  // iter:6000 score:422
+  // iter:6100 score:464
+  // iter:6200 score:551
+  // iter:6300 score:628
+  // iter:6400 score:543
+  // iter:6500 score:585
+  // iter:6600 score:436
+  // iter:6700 score:382
+  // iter:6800 score:385
+  // iter:6900 score:353
+  // iter:7000 score:512
+  // iter:7100 score:412
+  // iter:7200 score:519
+  // iter:7300 score:268
+  // iter:7400 score:2101
+  // iter:7500 score:426
+  // iter:7600 score:361
+  // iter:7700 score:301
+  // iter:7800 score:414
+  // iter:7900 score:335
+  // iter:8000 score:507
+  // iter:8100 score:317
+  // iter:8200 score:387
+  // iter:8300 score:325
+  // iter:8400 score:245
+  // iter:8500 score:394
+  // iter:8600 score:408
+  // iter:8700 score:285
+  // iter:8800 score:246
+  // iter:8900 score:769
+  // iter:9000 score:365
+  // iter:9100 score:281
+  // iter:9200 score:254
+  // iter:9300 score:325
+  // iter:9400 score:388
+  // iter:9500 score:380
+  // iter:9600 score:219
+  // iter:9700 score:291
+  // iter:9800 score:273
+  // iter:9900 score:333
+
+//dnn_cmaes target 2
+  // iter:0 score:7667
+  // iter:100 score:2333
+  // iter:200 score:3545
+  // iter:300 score:2288
+  // iter:400 score:2677
+  // iter:500 score:2320
+  // iter:600 score:2012
+  // iter:700 score:2441
+  // iter:800 score:1645
+  // iter:900 score:2071
+  // iter:1000 score:2333
+  // iter:1100 score:3033
+  // iter:1200 score:1211
+  // iter:1300 score:1150
+  // iter:1400 score:1299
+  // iter:1500 score:618
+  // iter:1600 score:7659
+  // iter:1700 score:1016
+  // iter:1800 score:1656
+  // iter:1900 score:1206
+  // iter:2000 score:1612
+  // iter:2100 score:1639
+  // iter:2200 score:1738
+  // iter:2300 score:957
+  // iter:2400 score:2271
+  // iter:2500 score:845
+  // iter:2600 score:1154
+  // iter:2700 score:2330
+  // iter:2800 score:1548
+  // iter:2900 score:842
+  // iter:3000 score:1151
+  // iter:3100 score:743
+  // iter:3200 score:2299
+  // iter:3300 score:567
+  // iter:3400 score:708
+  // iter:3500 score:540
+  // iter:3600 score:1110
+  // iter:3700 score:850
+  // iter:3800 score:488
+  // iter:3900 score:625
+  // iter:4000 score:644
+  // iter:4100 score:923
+  // iter:4200 score:1773
+  // iter:4300 score:389
+  // iter:4400 score:1115
+  // iter:4500 score:564
+  // iter:4600 score:487
+  // iter:4700 score:748
+  // iter:4800 score:755
+  // iter:4900 score:817
+  // iter:5000 score:718
+  // iter:5100 score:602
+  // iter:5200 score:590
+  // iter:5300 score:571
+  // iter:5400 score:863
+  // iter:5500 score:580
+  // iter:5600 score:410
+  // iter:5700 score:420
+  // iter:5800 score:1180
+  // iter:5900 score:683
+  // iter:6000 score:405
+  // iter:6100 score:294
+  // iter:6200 score:594
+  // iter:6300 score:265
+  // iter:6400 score:473
+  // iter:6500 score:561
+  // iter:6600 score:321
+  // iter:6700 score:506
+  // iter:6800 score:382
+  // iter:6900 score:253
+  // iter:7000 score:213
+  // iter:7100 score:571
+  // iter:7200 score:447
+  // iter:7300 score:403
+  // iter:7400 score:828
+  // iter:7500 score:183
+  // iter:7600 score:292
+  // iter:7700 score:385
+  // iter:7800 score:335
+  // iter:7900 score:863
+  // iter:8000 score:7475
+  // iter:8100 score:358
+  // iter:8200 score:339
+  // iter:8300 score:296
+  // iter:8400 score:193
+  // iter:8500 score:223
+  // iter:8600 score:150
+  // iter:8700 score:231
+  // iter:8800 score:347
+  // iter:8900 score:238
+  // iter:9000 score:564
+  // iter:9100 score:1489
+  // iter:9200 score:583
+  // iter:9300 score:287
+  // iter:9400 score:144
+  // iter:9500 score:214
+  // iter:9600 score:844
+  // iter:9700 score:244
+  // iter:9800 score:205
+  // iter:9900 score:293
+
+//dnn_cmaes target 3
+  //   iter:0 score:4978
+  // iter:100 score:4505
+  // iter:200 score:3940
+  // iter:300 score:4155
+  // iter:400 score:3182
+  // iter:500 score:4082
+  // iter:600 score:3220
+  // iter:700 score:3862
+  // iter:800 score:2531
+  // iter:900 score:2587
+  // iter:1000 score:2382
+  // iter:1100 score:2284
+  // iter:1200 score:3236
+  // iter:1300 score:2925
+  // iter:1400 score:3395
+  // iter:1500 score:2708
+  // iter:1600 score:2866
+  // iter:1700 score:2339
+  // iter:1800 score:3431
+  // iter:1900 score:2518
+  // iter:2000 score:2686
+  // iter:2100 score:2005
+  // iter:2200 score:2502
+  // iter:2300 score:2039
+  // iter:2400 score:2573
+  // iter:2500 score:2158
+  // iter:2600 score:2220
+  // iter:2700 score:3201
+  // iter:2800 score:2396
+  // iter:2900 score:2666
+  // iter:3000 score:2115
+  // iter:3100 score:2310
+  // iter:3200 score:2642
+  // iter:3300 score:2457
+  // iter:3400 score:2469
+  // iter:3500 score:2318
+  // iter:3600 score:2487
+  // iter:3700 score:2140
+  // iter:3800 score:2007
+  // iter:3900 score:2665
+  // iter:4000 score:2054
+  // iter:4100 score:1915
+  // iter:4200 score:2116
+  // iter:4300 score:2198
+  // iter:4400 score:2009
+  // iter:4500 score:2228
+  // iter:4600 score:2975
+  // iter:4700 score:2802
+  // iter:4800 score:1998
+  // iter:4900 score:2767
+  // iter:5000 score:1869
+  // iter:5100 score:2063
+  // iter:5200 score:1799
+  // iter:5300 score:2035
+  // iter:5400 score:1827
+  // iter:5500 score:1649
+  // iter:5600 score:1709
+  // iter:5700 score:2662
+  // iter:5800 score:1669
+  // iter:5900 score:1738
+  // iter:6000 score:1524
+  // iter:6100 score:1636
+  // iter:6200 score:1774
+  // iter:6300 score:1601
+  // iter:6400 score:1594
+  // iter:6500 score:1496
+  // iter:6600 score:1514
+  // iter:6700 score:1195
+  // iter:6800 score:1391
+  // iter:6900 score:1420
+  // iter:7000 score:1356
+  // iter:7100 score:1385
+  // iter:7200 score:1117
+  // iter:7300 score:1182
+  // iter:7400 score:1266
+  // iter:7500 score:1985
+  // iter:7600 score:1427
+  // iter:7700 score:1465
+  // iter:7800 score:1162
+  // iter:7900 score:1212
+  // iter:8000 score:1171
+  // iter:8100 score:1269
+  // iter:8200 score:1363
+  // iter:8300 score:1244
+  // iter:8400 score:1288
+  // iter:8500 score:1084
+  // iter:8600 score:1005
+  // iter:8700 score:1335
+  // iter:8800 score:1179
+  // iter:8900 score:967
+  // iter:9000 score:1049
+  // iter:9100 score:1043
+  // iter:9200 score:1015
+  // iter:9300 score:927
+  // iter:9400 score:1060
+  // iter:9500 score:973
+  // iter:9600 score:953
+  // iter:9700 score:915
+  // iter:9800 score:1064
+  // iter:9900 score:1032
+
+//dnn_cmaes target 4
+  // iter:0 score:3654
+  // iter:100 score:3662
+  // iter:200 score:3761
+  // iter:300 score:2381
+  // iter:400 score:3166
+  // iter:500 score:2930
+  // iter:600 score:3159
+  // iter:700 score:3242
+  // iter:800 score:1955
+  // iter:900 score:2193
+  // iter:1000 score:2459
+  // iter:1100 score:1792
+  // iter:1200 score:1677
+  // iter:1300 score:2123
+  // iter:1400 score:1566
+  // iter:1500 score:2084
+  // iter:1600 score:1739
+  // iter:1700 score:1559
+  // iter:1800 score:2688
+  // iter:1900 score:3921
+  // iter:2000 score:1308
+  // iter:2100 score:2527
+  // iter:2200 score:1826
+  // iter:2300 score:1617
+  // iter:2400 score:1653
+  // iter:2500 score:2763
+  // iter:2600 score:1414
+  // iter:2700 score:1603
+  // iter:2800 score:1159
+  // iter:2900 score:1680
+  // iter:3000 score:1256
+  // iter:3100 score:1563
+  // iter:3200 score:1615
+  // iter:3300 score:1537
+  // iter:3400 score:2101
+  // iter:3500 score:1629
+  // iter:3600 score:1231
+  // iter:3700 score:1288
+  // iter:3800 score:2119
+  // iter:3900 score:794
+  // iter:4000 score:888
+  // iter:4100 score:874
+  // iter:4200 score:1019
+  // iter:4300 score:1890
+  // iter:4400 score:1564
+  // iter:4500 score:1140
+  // iter:4600 score:1536
+  // iter:4700 score:1118
+  // iter:4800 score:1006
+  // iter:4900 score:1492
+  // iter:5000 score:1186
+  // iter:5100 score:980
+  // iter:5200 score:1271
+  // iter:5300 score:918
+  // iter:5400 score:769
+  // iter:5500 score:765
+  // iter:5600 score:886
+  // iter:5700 score:952
+  // iter:5800 score:1087
+  // iter:5900 score:1911
+  // iter:6000 score:954
+  // iter:6100 score:2255
+  // iter:6200 score:903
+  // iter:6300 score:674
+  // iter:6400 score:1305
+  // iter:6500 score:755
+  // iter:6600 score:696
+  // iter:6700 score:1306
+  // iter:6800 score:636
+  // iter:6900 score:660
+  // iter:7000 score:644
+  // iter:7100 score:786
+  // iter:7200 score:675
+  // iter:7300 score:708
+  // iter:7400 score:689
+  // iter:7500 score:1006
+  // iter:7600 score:563
+  // iter:7700 score:1100
+  // iter:7800 score:802
+  // iter:7900 score:753
+  // iter:8000 score:2403
+  // iter:8100 score:1479
+  // iter:8200 score:683
+  // iter:8300 score:736
+  // iter:8400 score:919
+  // iter:8500 score:1132
+  // iter:8600 score:1125
+  // iter:8700 score:763
+  // iter:8800 score:679
+  // iter:8900 score:2588
+  // iter:9000 score:637
+  // iter:9100 score:547
+  // iter:9200 score:660
+  // iter:9300 score:598
+  // iter:9400 score:499
+  // iter:9500 score:648
+  // iter:9600 score:805
+  // iter:9700 score:589
+  // iter:9800 score:577
+  // iter:9900 score:426
+
+
+//dnn_cmaes target 5
+  //   iter:0 score:2496
+  // iter:100 score:7168
+  // iter:200 score:3541
+  // iter:300 score:2496
+  // iter:400 score:2496
+  // iter:500 score:6930
+  // iter:600 score:2602
+  // iter:700 score:2182
+  // iter:800 score:2555
+  // iter:900 score:2200
+  // iter:1000 score:3032
+  // iter:1100 score:2509
+  // iter:1200 score:1907
+  // iter:1300 score:1459
+  // iter:1400 score:2356
+  // iter:1500 score:1897
+  // iter:1600 score:1724
+  // iter:1700 score:1491
+  // iter:1800 score:1731
+  // iter:1900 score:997
+  // iter:2000 score:1302
+  // iter:2100 score:1409
+  // iter:2200 score:1380
+  // iter:2300 score:1426
+  // iter:2400 score:1360
+  // iter:2500 score:978
+  // iter:2600 score:1006
+  // iter:2700 score:1147
+  // iter:2800 score:1110
+  // iter:2900 score:1251
+  // iter:3000 score:1530
+  // iter:3100 score:1143
+  // iter:3200 score:1082
+  // iter:3300 score:1072
+  // iter:3400 score:804
+  // iter:3500 score:877
+  // iter:3600 score:768
+  // iter:3700 score:1062
+  // iter:3800 score:771
+  // iter:3900 score:945
+  // iter:4000 score:1151
+  // iter:4100 score:957
+  // iter:4200 score:1349
+  // iter:4300 score:805
+  // iter:4400 score:965
+  // iter:4500 score:898
+  // iter:4600 score:817
+  // iter:4700 score:1461
+  // iter:4800 score:910
+  // iter:4900 score:1547
+  // iter:5000 score:7044
+  // iter:5100 score:850
+  // iter:5200 score:1996
+  // iter:5300 score:910
+  // iter:5400 score:1347
+  // iter:5500 score:803
+  // iter:5600 score:854
+  // iter:5700 score:725
+  // iter:5800 score:803
+  // iter:5900 score:805
+  // iter:6000 score:744
+  // iter:6100 score:922
+  // iter:6200 score:879
+  // iter:6300 score:701
+  // iter:6400 score:760
+  // iter:6500 score:1082
+  // iter:6600 score:1482
+  // iter:6700 score:821
+  // iter:6800 score:667
+  // iter:6900 score:843
+  // iter:7000 score:893
+  // iter:7100 score:1179
+  // iter:7200 score:852
+  // iter:7300 score:728
+  // iter:7400 score:777
+  // iter:7500 score:638
+  // iter:7600 score:716
+  // iter:7700 score:1334
+  // iter:7800 score:669
+  // iter:7900 score:633
+  // iter:8000 score:673
+  // iter:8100 score:545
+  // iter:8200 score:589
+  // iter:8300 score:602
+  // iter:8400 score:644
+  // iter:8500 score:787
+  // iter:8600 score:580
+  // iter:8700 score:751
+  // iter:8800 score:678
+  // iter:8900 score:551
+  // iter:9000 score:608
+  // iter:9100 score:699
+  // iter:9200 score:5326
+  // iter:9300 score:745
+  // iter:9400 score:682
+  // iter:9500 score:576
+  // iter:9600 score:975
+  // iter:9700 score:1511
+  // iter:9800 score:662
+  // iter:9900 score:683
+
+
diff --git a/cpp_voxel/main.cpp b/cpp_voxel/main.cpp
index 173f1a0..b2b933c 100644
--- a/cpp_voxel/main.cpp
+++ b/cpp_voxel/main.cpp
@@ -476,10 +476,10 @@ int main(int const, char const**) {
     std::vector<unsigned char> targ5 =drawFrep(&ss,minX, maxX, minY, maxY, dx, dy,"hole_target",false);
     
 
-    // EM( width, height,  targ5);
+    EM( width, height,  targ3);
 
 
-    EM_df( width, height,  targ5);
+    // EM_df( width, height,  targ5);
 
    
 
@@ -596,56 +596,56 @@ int main(int const, char const**) {
     // itr:50, distance:6
 
 //voxel target 3
-    // itr:2500, distance:4848
-    // itr:2450, distance:4619
-    // itr:2400, distance:4413
-    // itr:2350, distance:4181
-    // itr:2300, distance:3988
-    // itr:2250, distance:3774
-    // itr:2200, distance:3571
-    // itr:2150, distance:3360
-    // itr:2100, distance:3155
-    // itr:2050, distance:2976
-    // itr:2000, distance:2783
-    // itr:1950, distance:2550
-    // itr:1900, distance:2404
-    // itr:1850, distance:2217
-    // itr:1800, distance:2101
-    // itr:1750, distance:1909
-    // itr:1700, distance:1753
-    // itr:1650, distance:1609
-    // itr:1600, distance:1456
-    // itr:1550, distance:1308
-    // itr:1500, distance:1191
-    // itr:1450, distance:1050
-    // itr:1400, distance:941
-    // itr:1350, distance:804
-    // itr:1300, distance:720
-    // itr:1250, distance:622
-    // itr:1200, distance:515
-    // itr:1150, distance:451
-    // itr:1100, distance:372
-    // itr:1050, distance:287
-    // itr:1000, distance:219
-    // itr:950, distance:165
-    // itr:900, distance:124
-    // itr:850, distance:80
-    // itr:800, distance:47
-    // itr:750, distance:26
-    // itr:700, distance:12
-    // itr:650, distance:6
-    // itr:600, distance:6
-    // itr:550, distance:6
-    // itr:500, distance:6
-    // itr:450, distance:6
-    // itr:400, distance:6
-    // itr:350, distance:6
-    // itr:300, distance:6
-    // itr:250, distance:6
-    // itr:200, distance:6
-    // itr:150, distance:6
-    // itr:100, distance:6
-    // itr:50, distance:6
+    //     itr:2500, distance:4875
+    // itr:2450, distance:4634
+    // itr:2400, distance:4407
+    // itr:2350, distance:4196
+    // itr:2300, distance:3976
+    // itr:2250, distance:3803
+    // itr:2200, distance:3578
+    // itr:2150, distance:3374
+    // itr:2100, distance:3151
+    // itr:2050, distance:2964
+    // itr:2000, distance:2762
+    // itr:1950, distance:2554
+    // itr:1900, distance:2399
+    // itr:1850, distance:2205
+    // itr:1800, distance:2060
+    // itr:1750, distance:1885
+    // itr:1700, distance:1746
+    // itr:1650, distance:1563
+    // itr:1600, distance:1447
+    // itr:1550, distance:1288
+    // itr:1500, distance:1122
+    // itr:1450, distance:1020
+    // itr:1400, distance:938
+    // itr:1350, distance:813
+    // itr:1300, distance:683
+    // itr:1250, distance:593
+    // itr:1200, distance:514
+    // itr:1150, distance:427
+    // itr:1100, distance:343
+    // itr:1050, distance:272
+    // itr:1000, distance:206
+    // itr:950, distance:152
+    // itr:900, distance:105
+    // itr:850, distance:66
+    // itr:800, distance:39
+    // itr:750, distance:15
+    // itr:700, distance:2
+    // itr:650, distance:0
+    // itr:600, distance:0
+    // itr:550, distance:0
+    // itr:500, distance:0
+    // itr:450, distance:0
+    // itr:400, distance:0
+    // itr:350, distance:0
+    // itr:300, distance:0
+    // itr:250, distance:0
+    // itr:200, distance:0
+    // itr:150, distance:0
+    // itr:100, distance:0
+    // itr:50, distance:0
 
 //voxel target 4
     // itr:2500, distance:4875
diff --git a/img/df/1.png b/img/df/1.png
new file mode 100644
index 0000000000000000000000000000000000000000..9ba9fa10962308b0d3992623502322e2ee2bd3cf
GIT binary patch
literal 717
zcmeAS@N?(olHy`uVBq!ia0y~yU`PRB4mJh`hJr^^Ll_vCrg*wIhEy=VJ?NPC)J=rt
z;F{m^yXJ7~vN#%VNHqI-W504xVb8>_<em_j<Ry<JltqtAth6}han#UFtIv=KsXZP?
z%tfU=k9xcO3HZn^xT>NvWRJ@ceXY8VA3-05R#tR&#D~-fe{?>|z2p(Al3s{mfEHUv
zg~L&Wl@$R;4r{e}9CcP|TOpw!%HJum?2+Tj3XdZRqUPR5nU&%eJaSuE;c&z|<c^A{
zd3VLcuGvc-xe4lr6gG$4QF*jfD{n$qtCCsZ#t1F3jvE0-omNIDBn69hFG*_b@D0_O
z)Wxb~7Pip=BpGp(X=Q{;Qm`oZlB9_py`eEWqTMbztCAW+bc8mp>|zbt=y7D3mYBy;
zCBfONA`~zsk7?;m>ta>1b2!=>R5-DNKcsMC$RB?}`E`$&R_<^((!OekhnAku$3`u^
zNnPBoH50nHmp*b5lwb15Y2}WHBkU`7L}=-WePo1~VisPwF+@jT<Ib+`rAW?M^C$_)
zk-nii6S`cL%tApv=)4hv;saig_n>~y6Z#k=YVL8gS1E4UBej(~B0&MB0Sd6rF6pI@
z7zLX{Z4^ZLJ0w;;QUryrfhfP%(PpK#6%`R$a$+ClLj=WFS43#Bb^hq?(if}`bp69E
z%Dm*!Ql)<j9*GAY4Om&RvLilZPl#5W&ZF5~;@(G3yVk6%*hpq_0VlG@^4%*|eg4q%
S?>z$p1B0ilpUXO@geCxh?jE!N

literal 0
HcmV?d00001

diff --git a/img/df/2.png b/img/df/2.png
new file mode 100644
index 0000000000000000000000000000000000000000..b63acfa12b64f16c67d754430caee69b0b7d9c79
GIT binary patch
literal 757
zcmeAS@N?(olHy`uVBq!ia0y~yU`PRB4mJh`hJr^^Ll_vC_ISEDhEy=VJ?QACV<EzF
zaLsS|U25Vw0jp>8UpA{c)aP;3)J<!hVNhZ3#IEd~keK8pkEE1EuS=}lag1`Qvx~Z3
z&kx!d8Di)VVi=-j)*WzEO>k9((j&*C+<`~+y^p2|@@wr=T=m20h`Q)}mpuU=6&^Vs
z)%QB;Ca51$qv#~6?_v}9QSlMCXjjF;N8(G87I%ni&FiRG^k{O2qL!G)Q8&TvP{G3?
zdo)F7yT~ki#Jlo_$|D2Oe2=4Qg6u0Rg0;*#EL@H%t&GrkBp}+oG-+aob4bpFE><PJ
zz>S_-Vx1N)N7+_Js60{tNiOU-9HKL+>!=c6@J0uaPM@Q*gEmGSY1Fzm1tu!iZQ*m2
z38W=JlzT~1V@GqS&IFKT&_)j}v2F{Gqe?4pD1a<mk~F!)eqGYSkQ||p$3u0dbona%
z+tJk;w9)g3eE7xykoh2&!4z)<Sq?S{WVu+EMF`09fFlb*mb)tPg?(HWq9ahaqstuZ
z3y`g?N@lBm2pBqm{HOD%euYxpiXSSE+E;a$hvrP^;#I0!@W}ayuqeM$-GZ(kPDk52
z)V0h!j<N~f5BaF@$nj`%hdfA2g}_J8qiUdVlh>Np@ngxO&W`+50Y|t+`IYQe-cS*p
z4T=HZz@y?y`#`bdc$8aEUdzn$=t3pCkU!2L8w0i0<#%eCdC?#l9jo8J{@&*!Yc*do
QFfcH9y85}Sb4q9e0NE}%O#lD@

literal 0
HcmV?d00001

diff --git a/img/df/3.png b/img/df/3.png
new file mode 100644
index 0000000000000000000000000000000000000000..5e45ceb35884e06d8c0a4723d2903369da4c5efc
GIT binary patch
literal 1152
zcmeAS@N?(olHy`uVBq!ia0y~yU`PRB4mJh`hJr^^Ll_uX+&x_!Ln;{G9^~#@?ZLou
zaLsS|U1ncX*6N(LUm!h0QYom=vNz<9px`Qtl_7r^1^Ko7)I`}kw914&x*g?QlH@MP
zucg-gW5J_@l{Y+(aEl7N)&vx82zjIMsJE+AX<tC$f)F3EkB&!O1mjm&1Zb&s{Rld$
zBFG&gqaZ5msuN)7dBjQ7+6yEU>Law#>8M|jVc-!b(Pq~*0UH;G_=s!_I?4c2t|BVz
z$`i0L;0Ti_yZ2ES!R8PhfsGDF4+a@V9$^rT?}}LPhy}z}5S4dX19E|nn4!l}c0uhB
z86DBdt~@~>-Hv#Hw5A9)hwKs9=y>#C(8lHtN3D4sH=vGB5H%N+4wcamweGf9*~Pr{
zk%FLl@W#LvEitd7jY@vYlA1fLMdQKj6-lif`XM$GyO>?)gdBAej9*cqB+A}pv9U|v
zMJME=f+&0E4@QX5j#_pd0Y?=C?LChA9#If22RUSJSFcjtjIP-oj#}@QJaRlDEvoJM
z$3e79V#y;%t#>Xp3zHUh$gk;=Sn#Mb<WA>}1x|wdeMAi%jtZ~b(Ya$!h$~OPM;EO;
zCB5AsYt03xztoBYnV!0;%RH!1xNzp8N8BKlJfRyMK*|n>=uGLF-Emq#RC~!IwMRxS
zN4Zw+5dP>QT3ER%sUgIsLo2Rh$Dd%s0Ijf&ACI-zypMVb)<+yoSQ(+YszTr+dkD|8
zu7gT-JG(f83?q){hZ{O-sdfA~s-@;}ltplV%+Z9EGgKalua?jeo$T_5QM7qU(xeXi
zB}t1ze1tx>hw4n}@>J6Mzxs!QsIW`Sy;T(xx<r-Uh1}`fQ4><AF3Rn?C%`pkUs&Pf
zu2v;I=THq%Zr7N$RRLOJ9Xoi!7l!Bv6wX}abyQqQFF17N4~0iYu~WPFmGmx$uB=dg
z^vVCIw4ipVhG@P^%!&wwN6lUAD=U<en!DHq?E{W-34-H@T~IpIrsGGWR#;a>z(*%7
zIhQpdAKi}d2X72I(%dB;^wH&rlW2U$4@E7rt{p2YltuMjbOJUy961^KMgzijI>H(H
zMn^Os6f;XZCa<(`(7M<0!|5m+D1mGasZo5?*~O^jw<5`XrA1>0uU1^gjRi^S5cWL~
zn|-B4XNRbk9hBYJF%^j|s<lsGW8l%0l@<|4yhP)>ZmdXJ6e6RMw6u#=iEYIU6;bxC
zh?PkTJ9@R$JdZjmg{`=ukks7e8C2NN(W=GPabrbNQ^*^gq}DD+C9@SX6hy7NBUU7B
z=$HzMpFX9q6%sm0OS?FOHg4`{)l%z-SO`;oP)TgX3{YwZ33c#ml}+ekcF_qj^gJRh
zYVC2<5hShhsI_bEl1C1L@vCNNJaRnR7gWe3m=DU{ejv7x;Hn>sK_$e029|htK|j?=
Svl$o|7(8A5T-G@yGywo!$;7_^

literal 0
HcmV?d00001

diff --git a/img/df/4.png b/img/df/4.png
new file mode 100644
index 0000000000000000000000000000000000000000..6ca8c9ae44ca980a5446651d7fb9b4198ba4f5f1
GIT binary patch
literal 767
zcmeAS@N?(olHy`uVBq!ia0y~yU`PRB4mJh`hJr^^Ll_vCj(NH`hEy=VJ$SL`QG^J~
z!B_wPzqrR`@AKwJf`h`z>n~E4CFv-OCQGiAIPGyX!cFU#QIO%ZiCr6eLV8k{5SFrt
zY|%OvAGEQ#Lp-!ce`SU9k=a_uribj&NKzMV22tsv;?ugsU1XL#S`@U=@d&4uo`$G@
zmxbq1)}@acJ0^$51ZeFO{Mf9erzU#8<A<ZD_~b5WC9!})#g#i0lLSS@CxW;^g^VkI
zxE)!fWf!3Jt|KDm=zo`-kc|x?cLWOsMeTJ&`CVdMj`DjQl@$~Z`q&)wvA2VJ)el9G
zme$ZYI-=$-F)>F^1{FFVS@6gOBziP-j)v&{jvYI?gqJ?*>*!u>;i)Cpv13Em<Ry<9
zL0m^IxekdC868po4vBazzDZr`E<O69?4Cy_E3qL_Y=X^Q%uAA*J3cN=N?&<HA*p8N
zjYuuCE{Xb(H!7miu08uh-YAGlyY$q9X#Xw=^Uya6qWmsByS2(DbXhAM3)Z?f1w>!g
zx(DWiX?CS!&Z7BVM<**C+YXZNRXS!5qQzZ%AT-FlJ&GXnXM^<hDjkaz)%Q5cCipm0
zR2t-*jh;s*gF?F^>L}aF8yZPAAsYj=?ul${)_TMovPVJGx~n4SsI1`rkfYo|g%diY
zwamJHsA|Pc>1uWr%?E|=?4Xa_t~v{n+*kfMs#NE3^jy%#)2?&YJYrb+<EfHgSYbm*
zO+&}z5E&Iwd4)$Rpb%m2u<$(U81zw5$uFRALP*Vuj=7;S8lv(#N$#TTUPoD7-Yj_J
zuyV(Y4snoha|gQ?-?Xle?nih<)jf{>a1SZmgeSrMXJGnw>hlKg$7dNB7#KWV{an^L
HB{Ts5Cfqi!

literal 0
HcmV?d00001

diff --git a/img/df/5.png b/img/df/5.png
new file mode 100644
index 0000000000000000000000000000000000000000..988bc3bad4ec3966bff643b65ff0151237e0b47d
GIT binary patch
literal 817
zcmeAS@N?(olHy`uVBq!ia0y~yU`PRB4mJh`hJr^^Ll_vCet5b#hEy=VJ?PkX*G+`w
z;F{m^yXJ7~+Of%bCx2C*?c%=V(G54PzFhLDrHi`QJ&$s`)~u*#2(j@A`Pkc`uO+7-
z$}jkF;iGt$n#D=UD=Qj0@<aXzePq`%o6^PWQWLna<NgYzx)n*vD|bX5Ijdzhp-b8|
zXF(G4${n6Z+_dthb<K9kS@I}t<qpRqX&|n&OU{Z%ZXoV6Exl=7-L5tcM~?;-ZtQ4Z
zu_HiBPvoP6sJO>bS0%Z1Nda1Iu6sO=P6*-Ys+ifOxKcvoqmig{kfF+>R;{)rNghXB
zS9NfQ@OU1b(7_$@N2su|i*codkl~s~-5uN^I@7uo1)H_@2^y|R+8DyqArbOXTJW%z
znAg#U4n|RX5yK@(3qisGAMIUuRzzrsGAoI#{xM&PEktKZ*HI9gTaX!~JV~%SL`P_2
z#8Ib}5h_Uw!EzBQqTDVzA%-BnYtTlIBTgXgt0GiHyIpmHHU=C?6761+<ZwhuwA)1|
zY@>%(n~P4+$LS!$Cv_<ba)<tD?KlcDd_u=jtvZb)kE2d2B|vt_cSwY7jL>Rx;aTy6
zUr>BSgpR1QQd?+E#}1F9Nh>9U3MXnkauV%cn&fe$I~43i{ZK;%QD>#NRY?w7Z7zF4
zjy8nwbXLslas&mJkm%u{!p4sF)e_UXxLs{Rj&2Bv(Rq}pr8fZ-@IFUbg9@8L0q>!e
zC$e#47x&UfX@b%#cX(>$iEZrck_K~E?1<FL6D!=@#k(YlS<rmN4G%3dfsYFxIUnH<
zsp<H!D9Lzb#e|OgD=Jom*aRFg*OJo`<rn?vdbD}zqk~FzAvO_OaSE#{c7({>_Bgt+
dmt?A*A?P?aQ*=`UF9QPugQu&X%Q~loCIH*0OgsPp

literal 0
HcmV?d00001

diff --git a/img/dft/1.png b/img/dft/1.png
new file mode 100644
index 0000000000000000000000000000000000000000..473598ae345e38659e226f4f1d20bfa875c15fa4
GIT binary patch
literal 490
zcmeAS@N?(olHy`uVBq!ia0y~yU`PRB4h9AWhS1Ja9SjVN8$DedLo!&m9%SshV!&{~
z;rIW3GY^G>rIStGY8fA^BobOPZ9HD#_^(U$7~fCbe-r*6v3)%6kLdoB{Dr4?DF0_U
z;a_-shvI+kon6w$X8jTPq<F2z^rnFKu}N<_RFgfo9qHPrRGoA*VxsTHgf%CYMHr;1
zqy+0oB!7zDr2VW%uu|(;4`Zbcl<@x)b4F7B$<!H!b|<V26Jt(h8>YmZtTs%765>e*
zc1+Sg(om=x-@*9UYo7q~v8gqRY(3gP-D-^NPKZC6{Lyir!2BNnPf<J)%%8$QL{N`}
z@+ZF@3Fl94Jd(+uoIpfOkEHOYh#pDfPa!>$!Jh(pB#S?J_(*Vna`BPS{^Z~z;k`*;
zt;h7HnD8;)o1((UWN(THAJe@lEPTxNrl9dLwwnUR$M|-N1|O4)?6ypvyyi&LM&D&g
zM=RXyj?VfxCFTh4W6ht6d6NAn?Kd8*aQxSyOI%RzXL!ZCf{}9_p8+TmJzf1=);T3K
F0RYy(+(ZBX

literal 0
HcmV?d00001

diff --git a/img/dft/2.png b/img/dft/2.png
new file mode 100644
index 0000000000000000000000000000000000000000..7a451daeaa658a71f6f1797d96bc5eeb36e196de
GIT binary patch
literal 454
zcmeAS@N?(olHy`uVBq!ia0y~yU`PRB4h9AWhS1Ja9SjVNy`C<PAsMV&4?0d-;vjIq
z;P?OjZ|73=0|HE3ypGu<&oewfBmIo=Gs(|Al?1rOpVXi1uQ*cSA@+##v0!93dyo2)
zpd3m56TLSKzdZ@dk+9w*{Jn?wW_R>4+e(!@iR(|;3s3G)+TW>tjP++|jKQ@h<r~v<
zPD*b~S#!dAW0KB^=#2?;PF5GD%{jqdm?m>ly)X%xFfUAzIcZ*)GUtSOVFD6yQoS%?
z4iX_=m@?-im|!nV(m7FGn6&0ZHi(EWOw&2(4I->JCagIry)kLcN$!m)F%#w=omJ>s
zCnDbC{i%CLO3dW;N7D-3=XF#c)2&o^C%OGe<Bs$@llOv%wKojjoeay7_@1I|*28<V
zlQ-Er?`Ypfb@Qat6%Kkw=Y5=_bA<Vr_9yjuhQx&6p8Bgna~UtO9;^gKkf*Dk%Q~lo
FCIHtb&<X$m

literal 0
HcmV?d00001

diff --git a/img/dnn_cmaes/1.png b/img/dnn_cmaes/1.png
new file mode 100644
index 0000000000000000000000000000000000000000..c6908202e4246aadac0548894934b7f224c7e9a3
GIT binary patch
literal 709
zcmeAS@N?(olHy`uVBq!ia0y~yU`PRB4mJh`hJr^^Ll_vCdOTemLn;{G9t@l&YA(WZ
zaLr%+U32E!**$1<d{rK;p(J`;V&#rw9!E{xwAL9074}Z-%I*n?NnY|uN*Sk=t5Qhe
zf{;B9NBBczR74NE)+~I)uu?+jk$K3T2(7lRAIrMLy^cBva)<2k&}!?9So4TA$k63T
znrQRVq=pXmP@XAW{M|nqx)OsvItt2%8M<iw3pnB*^2gzbfvEhnE_;!}30?f2N0|iM
zS5`!5iFH~89CZ%b7;t2vmYMg_BtiC7H*`d$U1XLeZ4Sv1DxA^P8?@2!NTZgS*U==w
z_Ek4DM7v#N)+H?t(Ge=#(WURQ;*t5%q=_AeLu(XQ{b&o(5&9^;;)i_TQS&893p);n
z{&5NU=({pP<57X=Y=}tCq^?#azVMBnT4LQ65l7WlM(8|B07-7_Xb#Pp)O8dj=?IdH
zIm)*3hQgx+QRyW~%^=AMUA#(sVH+K_%sMP0kR&H}G>7U;>+%IjMrfIJT0|U8T6sg|
zQG#gq(j=&4uM%JA#t1F5E{hP5q{gEFkmTYHXOPabN_-(8$!?1PkfhEd1CX7YJDNjs
zCUu=v;tSjusAbk|;czr<Wrf3$?ob;AQT~pKm0j&i9x)2)2Y=iUVx#cLRm%=6+zAR^
zXQj5)KNf`41RN0ng?gfrT!^8IR-8gobC+Y##~{J|3m(}o>PieMoX}CfvSK2kG=V3%
dz@&b#_h+p7Jbi{PHv<C$gQu&X%Q~loCIBIBA=v-`

literal 0
HcmV?d00001

diff --git a/img/dnn_cmaes/2.png b/img/dnn_cmaes/2.png
new file mode 100644
index 0000000000000000000000000000000000000000..c62de67ccd50ca68566bc9f2f3eeb6821eb60d8e
GIT binary patch
literal 582
zcmeAS@N?(olHy`uVBq!ia0y~yU`PRB4mJh`hJr^^Ll_vCcs*SlLn;{G9(0@}U?{+R
z@X~*I-B%|BlX710mZxc5lUNy%yd<f2Vwb5Kl{tEyKe$Evy^pF2{tr0HKfTLascu5o
ze;v{3E;b7uO$dn*`Z%MDKd8|2NV1ll$5B<m{*^xzK$6QIH6uwnYuR}nWd%uUh>E+|
zEPJ##Bu3!ljIREmLPwBJN+c5n`B(kW5N&t0S@x(QL`Ll6j4tM&!iXcuT6`Wy69xNM
zS}2es=_ts*%0fYu9c1i;5E+q=GrF9E3IjmKdLDHI8LNURnXh$C-utMOvS@Zs$Qr|-
fjmJD_!HEx=W%l{#)Pw2_3=9mOu6{1-oD!M<3gzVJ

literal 0
HcmV?d00001

diff --git a/img/dnn_cmaes/3.png b/img/dnn_cmaes/3.png
new file mode 100644
index 0000000000000000000000000000000000000000..7f205e82bbe26c8b5181d963f729f78dbc4affda
GIT binary patch
literal 1020
zcmeAS@N?(olHy`uVBq!ia0y~yU`PRB4mJh`hJr^^Ll_vC4|}>ehEy=VJs4ed+k=7S
z;H%&AyS86j$RFj{Rl&<HHeqI0cUMJ#VWgIx)+5KGDJyp@=*ZVn^FDgi#U>CWs`jX}
z>ts-&qM&|=&$O=2MP2-z6$_I#h4_es);JuI78PEaw1^{=M`WYJQJ0l7R33RBRS@J3
z^_kMeskCpUghJB7uFfDs$0Nd`>|GHHlNN>e2z+ernyVDHYKDfWu*;snje$qlK!!AR
zuxf>M-B<xuvN7N&m!LGnl&}>M3Q5bmI6v+0;#3M-^~3Q9qn4eH)5;kNNsGJkmH2`_
zDhl$0tl$%kSK<pXj5s2^a)!dAC0cBq6$`zNvIwe&7H;S;UlrmbP#7f2-Wjm~r1#Mh
zt+K9&6_32N)H*CycJ(TSt*DsL#i``CCaJZ9S4(b5Qd5WU>IkqMAj3OD|0pE2cd0|z
zHi8?2k8*>od7`z?MP|vP)(y@_-2}x$J~n?~6y;aaTk)tjL~#2;EisQ)rM$x-Iup9|
z1-Bm#)tS=8F1Y=0$eIaV>PmULL)J{`5?9Kb9g;JlOWx&9*vcCkqWLa&?yb6^Da!47
zXWl9c2d%J<9e<ZTQdk+G`RJSb(Z-;Sjz^A$%IJt%yTk+>WmtJb^HGu(o5xW`CA}p{
z4IwfrkCZ^%gGzNfyBLECH+00WOKJ$=5%}00$}^$MQK@cYSM$=O2_5n49yzR(P<h0p
z#W$(TQAuynBZid{3Xht!$~=x9RMK0Mv>0U8H}|7#D=i$3yww-gUYgY2aobx|dr8vb
zj@!|q+)I;|cHGVq&0mtVu;aF#sJ+KgX^_|UOaOVwImBin$cxUQHIuvYmGa~RKPrgw
zE9J?DFAULmWais?=&i}Bg4;_UIXv7JbyVTuHm{=&D}Sgx`WAB30pwN3qillzXLL0N
z83rD)Uy`&S#7FF7{|X5W(aElVl(pErj;08*ulgZWxB#Ri@`#_PzKaY**+%E1OoG;-
zJX5+(Dw(Z{P)urvC}9(ocF74b4A4^RzOf*wy<;lG6zxzMg`}ljjzNZzN4OwqbV7)a
z*v5dP41(ODJd?UkDv7O-(0SAgQNkoD4@$pa<<g?^A|IWODy*EL^N3wk7?fW;wA8wP
zI39Ho<kw>JJene?A2P?`$aIKSVNrFVg{aIzCP98JKaEuqDx&HF9~V4oS=8ki1QyiO
m5LFjk*wyWI^sUK1=8gWlg|05y*u=oVz~JfX=d#Wzp$Pz2b&jt9

literal 0
HcmV?d00001

diff --git a/img/dnn_cmaes/4.png b/img/dnn_cmaes/4.png
new file mode 100644
index 0000000000000000000000000000000000000000..a9a47a90caa78e776b95675e09c81df0cf6e0815
GIT binary patch
literal 783
zcmeAS@N?(olHy`uVBq!ia0y~yU`PRB4mJh`hJr^^Ll_vCu6epRhEy=VJs3UdQG^J~
z!4rS=t<-buZY^70!7<@Mkkz}D5~n?mM!0DmGYT@CHnD4CPe@Pdk|Z5v(PT-iQja_Z
zS4r&lI4Z34ZiNKD=h0>*xd1~m5IrxzFwg5Kvr=4$p&p1X3oxwnILfS47G(HuQdh51
zS(xEJkE3pa>?<XfBsF(5ht7%7GV7>l?h^Js$|jf}Qs}gDhw>w4Ek8BUa+ey9qn%40
z^>y&C-l6Oy8m}c<?xM5cQCA1I);<rdyp9NuqyJs*1b$=<Ds(>5q$TokL6_^&M{OPP
ztC9>??ofQhq9rz=OIpcq(WApbg|0_VhSUUTt?RIu*~Ra5R8&ws<fG!s9ZHXuXxS-<
zhP%uOIm*7|QB%j{)fJmVVgw9VR4hiK{)K*2Te(9a=}+KCHWYg4qXaNNpl|_5dEE+&
z04==^3Gq-F713~)o^CC^30>Ms$6Q6(J&uYBK3>%|7v#di(4&1INAFmb<i2u;V$z+E
zjgv#}2pZ<Cy5Xp0)*)dYx<^A)+O=o3R@{^>b{7ymp^F{Fp9kj8)|xk^t5@k*tf;@&
zQ8vNk$zAG8AN6%?^gPNPROo)>#*#;@D|aX-<ph0f3ds>L%v)6vs3j+2Shu1gP-~uu
z;lI$0%^`0T9v#sto6t4ab&k(bzM#Sd9r5du)K^wCgThaJWyR)>_$5i|D}OBL&=1?V
zI7CO`5qIbt4bkq-A3~zmUPlipiG^<598%NRaWv$Oj%d7E5~HZK_tEKHKPGfBFL@;1
zQLz|IcUClm=;>V+4o4k>3Yi40S6X;z`Kdi(6=nB4>gj5;;*rBj36~sD0QT&6i3u!R
o5Yp4F^l$N_1guF9o+^K^e^_|w^NuYSK*^oK)78&qol`;+0J>R5aR2}S

literal 0
HcmV?d00001

diff --git a/img/dnn_cmaes/5.png b/img/dnn_cmaes/5.png
new file mode 100644
index 0000000000000000000000000000000000000000..33ca4e3c4b5398ae5d6728279ac8ede716e6efe1
GIT binary patch
literal 711
zcmeAS@N?(olHy`uVBq!ia0y~yU`PRB4mJh`hJr^^Ll_vC`aE46Ln;{G9yDBZ$4rFf
z;Jn}RRd){Z%beKshV|rjmQ_K8Jrlc<dqQNAmpqbC7CkPp(&CuMQA0PaK0_j;_Jkbi
z@6w;pHNEpkYuCe|k3xd=3zAlZ)NJhdzc6V*NX^0y{!pIDUHU>BBaRBJl+b&WB+9%b
zX+?*0sEv;3VHcYfj}%u*C?rkjVqfyeQP4T`j*cjQ#}6S<bI+r`O8Y{N@&*-d>=0kE
zBSK40=%bUUxaUzPLFpAc9JItbZ+IL{S{b2|<Sg2~B&o5(H&ka*7psz4=td7Mv5p%d
zN0nAaC?o~rl>8BJ<d~M2=h1d0v#^aGT6Q8EH+H!OeO%bl3o?k`HD^uI#E=?|q-4?V
zC6Am1rB_F&h{|`}h&ZaW5~h_&aQ3PQ713^&oE1qELv%zo&g^mx+8A-9pUZU**nXWP
zWsq(r!PzS!R7Ax)Z#W!PTDc?O$Z3!j+^&0KK-`EU-5{>C3s}z%&m*Tpbf$DkyY6v0
znzV99;1TYS7zI$E1c7|tthCSLXlsz6!;u0}aqpu7pdeEaJ?z30R5&?=N5s(KXm60A
z#}NThbFgHHje@AN3s1nu2_ZZ}9~X47FHM@!!5(6xBg*W0XU(I;l@eNy)I^z=JmPlw
z<94*a<Nt!Bj*yy(D<1K?{ORs;4EmTP_<uptjF6h0D;}9E{aco_AS6d+m4ue4zDQ`z
fOw!ZLM{yptRiF0?%Y-m6Ffe$!`njxgN@xNA^Aj9A

literal 0
HcmV?d00001

diff --git a/img/dnn_sgd/1.png b/img/dnn_sgd/1.png
new file mode 100644
index 0000000000000000000000000000000000000000..7ef016e17578484dc8106964e8bf4e2ece76522f
GIT binary patch
literal 663
zcmeAS@N?(olHy`uVBq!ia0y~yU`PRB4mJh`hJr^^Ll_vC;yhg(Ln;{G9z2+M#6aM%
z!-oHhB&SShUlM(LmgiAZH?4JsL4~~&yRv&iVv?6Ul2R7EF0pdQF%OcY8kPR7e54rk
zkwLIKglB5kLM5}+5-Ot1t}-Ep4q9xTKPGm`dmm*GbPoCBp;f1mw4h7g<7mGNPgr4u
z7GHNoM^|%DVZf2YAu^M?oR#EOJem+9BlIyqlzqvghK}~tH*`d2yY6u~nzr(W&LdSV
zGq0m=g8D%l1GUV$DrR>125s~_!X273smoU>ZdFoqNRGhABvI)lNzEP8S4ZfGO1tcd
zIhwRGLgx{)mYDa^BtiLrjS*U6-9H+-js|UvIKm#HGp*~WlHH=Dg&{g(9|c9ZmnLoO
z=wA_`A=>R)<8ssqq*Yl<%nPJ7aAN>SYe!crNUM8@&J;|o{3{T)-cWe-6l5!#pnmwq
z2raYDij5#!J&$;Y=1l17Rf<~ya<IrpBhlGQk~VjUue_lG@~g*DwUrhMk61x|RTSh8
z+Zd_E*Hy8i>ntdkm_ubIbRAZbTk>c^$RCFz%po#Uy5u`0);!t}@+abmfvEk2E=DD`
z6+ae+@Cbf%7PX(&m8itGT0%k8*)=E3&_k=OJ7PuBiV&NCBle*-E|f;U{f>=wpQC;V
S1u!r$FnGH9xvX<aXaWGsd<rB0

literal 0
HcmV?d00001

diff --git a/img/dnn_sgd/2.png b/img/dnn_sgd/2.png
new file mode 100644
index 0000000000000000000000000000000000000000..ae8d96fd29dab22a541223aba17928a1c17b09ab
GIT binary patch
literal 568
zcmeAS@N?(olHy`uVBq!ia0y~yU`PRB4mJh`hJr^^Ll_ts|9iSPhEy=VJ$R6p*@5S<
zLFNC2vAGxAgB1?6`W%f^7ESLBnPVDMc+G?Qoad`KLjMG6$%z;)ND9zubG2DCN}&Y7
vpB0ZBS6XB*d9-F?*Jd}Zb5d02)G%CUGW)Epw5^AMfq}u()z4*}Q$iB}hq~IW

literal 0
HcmV?d00001

diff --git a/img/dnn_sgd/3.png b/img/dnn_sgd/3.png
new file mode 100644
index 0000000000000000000000000000000000000000..1f0e82704372d82e516c85c943b2570d62da98e3
GIT binary patch
literal 1043
zcmeAS@N?(olHy`uVBq!ia0y~yU`PRB4mJh`hJr^^Ll_vCZ+W^nhEy=VJ;<2%*o}eZ
z;Jp9#RhKw>9152h?~Kt)?Fe1@LqX6wL}yADzu?B;qfRS-2nbq-g17>P3z8Ow=!kq=
zkkr`0D9XJwX<~=CmY)bjSYV^$(G<aEEitd7OoGy(J|c!IK&k~cIv-^bWCxiy*_CI7
zg~p?XuGXN!O&yG)?5;8a8w0fb#0*y?1srh{<zD(IMUXv&r^5oIbB@lVhAu`yc97Mq
zN_;DBC?+*^wFYf;IKn7u?cxK{DF#y6+~EnaQ#j<0LeeCN5*E>V0mHzfPAel+lA5~2
zmDE;6Xoz;Z_ym3QJ(2=(d8gJsmpM=mb%UJOs#G_zt66E^$_gb>Zr49bqRdKWD=H>*
z9aXC9?CMow3#suunk2a2<tV=r->LvDvF;zPTJt()EOA;Hq4P+5WraXtla^?=>z#kg
zy^cBwZePACBuC(*(@{3T?aQ^Mbg>I=f2t*tH+}UFp}gs<Dg^STul%8QXWHrt#XHkh
z{b(+TUX;{aU>$mt?_pV27vn>-*rN+VYC3oDuC~w+^>?{rwt9wwsC~x{+fc(mEwip2
ze^)1M3gPMakszw>ag<R|e#Ik}l`|9`HHXYm5S{E&)6pfoBxz9xe?VbVh>zGuMlCh(
zqbY*&i;@<BxQ<$Co*?eBq^1xbk&h3x*p?<O>bPyMRpxb61>{^akE4!)+s|snc^qBP
zaa&Q8KWJm{k=$KcqSCH+{HAuvyWE-Pag<wd`%+MNz7+!by?SMrg{Rg&mpk)TRVXG+
z3ekA<E##=1Ap4RokefA<mV-p(MJK!DOyF|8^KbDZ7D4?bkGzk#h~9Vk!z9Y>V&ieN
zxuaR@pTZ;Y6%iWstAD5^1sr7)%wLzZF{DP=a6wXghk4k>2(5V?H$cfndUXUSVE!yf
zn$%$)vM~Up(feqp(mkJ}PAe;f1@l)VO$^!7+0m@E50qFuwC;ftj=qabz(z3JPgL5K
zXH|rXsCf5{g-Odhn6<<_jviGiTOlD}xFV@BBt|1?d6%OgSeR9bEtIEABBXFrNQ^>K
zz)?m)W-Y&IUED4_t1J|f9FCq0Ds1d<6lHgP16SfGXdOC7M^wB+BEZn|h@Yss*HKrc
zvQ;xwl9qP~FMXsWXdUV!vM~^(bz+CCmLDkhoD3?2us=3;v4YsWT7DuQosKH4+~IMA
z4HQHxB6LK>JAXJHW%oSls<baea8*FaN5`PTi7Os`Tfd*-L-1~+e>}{R3=9kmp00i_
I>zopr0N+!Xc>n+a

literal 0
HcmV?d00001

diff --git a/img/dnn_sgd/4.png b/img/dnn_sgd/4.png
new file mode 100644
index 0000000000000000000000000000000000000000..4c6eb410ac35c009d6a573bffa1676ac7d5daebd
GIT binary patch
literal 761
zcmeAS@N?(olHy`uVBq!ia0y~yU`PRB4mJh`hJr^^Ll_vC4tTmahEy=VJs4Q@I81=$
z;H%&AyJ8pi^WN5;B)~DD|4_=ZBpqeZWXY8hr#+5FxM>|T3NoBFv1?;bNKfh#!crBD
z9oAZGD=VCiG-~PTh+4bOS@394&_`!M^;J7og!~COa#BlAL)2d2qmroj<SzM+iius_
zo=4pT^}`AkSKiQgbW}@EMO4~lkLOX>C65|A%vbH`2(c0P=q4&YvCCRXETE8a<qqW}
zMp5wzUD8ToK_B%6twVJ*M9p3P6p3<s9_1Aj58T)gaz~)hP&9u^m$Z`JibuXdAA38v
zS64KL)F?lCq!p(lYVHyfbCi4OqqYvmquomo)W@ZdSc3}Pk1T*tKY|K3h1duf?hBct
zA<FO4qc5uNb(Br;vG-BWppA}4egqXx3ds=xNh^p-yY|>?@lEUMRXQdw%I<yCP4Kb3
z7T**QKVFM(5;DDAi*Evm52JlW{k=fymvyNxO<LSh7=BbZXk*}!9jhO4uDqd<bSLy<
z3&<L|RW~$2*0gJtft4@pnj7?yS@7{XWZGHq@v^SDK^vWq{0KYhxAKN!QqAh5<solG
z4F3gf4Az<_VEAuw(((`+&7?np8-um@gbE8q{XLF)D*apjsIh||WK~T^M{B5!rl`D1
zQXt4>?41z-M;U`YCMt;q7dC{{%;;zhkx>zq*GLi+W%oSV-c_-=i+SmzX4gG|M;n7a
zK2*B5;8DWLAF4`mD?oIrl3!S1Q^=nnLG_guj#_#Oj}%1JJ&(4!*sOe{vU10Q4p}X~
vDP7&&Hx@ifSt(KPQnUCGE1nehkMVxWzR&#O#=9997#KWV{an^LB{Ts5m7O<U

literal 0
HcmV?d00001

diff --git a/img/dnn_sgd/5.png b/img/dnn_sgd/5.png
new file mode 100644
index 0000000000000000000000000000000000000000..8f325bbd4f7c6c1b76f998942b86e151bcbdbab1
GIT binary patch
literal 761
zcmeAS@N?(olHy`uVBq!ia0y~yU`PRB4mJh`hJr^^Ll_vC4tTmahEy=VJ!rU1#8ZI9
zvH!Qc)iqWXk!k*6{@?Z(c^}>CrnSyAsBrDXuI%2BnCvBwqLf9iORd~-&4XyEJt0T*
zMfZ39So(-H=%bS0{}o9qL-sfvVHE9NlC-j;Jw#_hSE`cTf=7pgHo6>P5|y9S#i}H>
z@<&5RO~er=QGV~E?Jhdu9~XqwI2`c~u~8A_@2;5H#lGZ`qo97s$A%Cal}AUl_`HuY
zEA4YQ>bSDP;fVMO3k}hB*P4l4&OwC{N5ofJsED$=)-3E|4l49GGJTbWf@r%-&Bm_8
zl@=<GHgv@+$%Po|h_buL1bt)|Y!Bt}KFTP_9`dKPqgjh>>7#}YM^Sr`LXV>hLSzIC
zS3Ht;kqI!=5M_7aSt%i4xF#t;tId^Xm4uMt3j9nF!zC~U_?Ubh5<!M4NdXY+mLz!`
zS<vOU(n29A;3&u?%|V3@M;3I|i-2wB>yQZh=qz|xs}1B%X01Afq==&%LS%#rJ&yht
zDD(icKQ?sTcaaGLc@Y{20Y}8af#6y*6BH)UAmZ=%Atc(q<PoD_{DMad;NjY=6u0Wp
zh7cQ#N3B|N6S~@6_jnw24*JL_s2>1|6ptfGpg3Z8)d~5?xH3W^sj-XS>!^^Re8|Vd
zl@ThB5=Fh2BrWVXtToN^Xp-Pzt!Z9Ixn2LXc8L?8fN&?f{|xKTT>GpWCAFD>fq}u(
L)z4*}Q$iB}0um@X

literal 0
HcmV?d00001

diff --git a/img/voxel/1.png b/img/voxel/1.png
new file mode 100644
index 0000000000000000000000000000000000000000..1e69a7a5034d61dc58035fe1006533e2203e70c6
GIT binary patch
literal 667
zcmeAS@N?(olHy`uVBq!ia0y~yU`PRB4mJh`hJr^^Ll_vCl001;Ln;{G9&F^jV<5nM
zF!jHyakQfV%cOrf*=nNKC06b@=5f^2O>3QDP+{-HuI!$WnB*moq?AdLYVY{rFUmim
z>!6a@Y6&gT!!9yGh8|jMofd17Izo5^J|>IWPwSHJmRR(tJ?NvdpmXRS2dz4Vq#a#{
zg9;;#IETng>1tMzTlQ!|h>Xz308#cOk0x}mufCxp%I;zlb2M$`4V_1-T4r8H(**Sc
zHwJ2%bydvl@(tSPdBi(3XF`{+QrxPf=8znrk3pi+OOl#9rmv3B5tVk?6LU0a<qd^L
zPqoCnk0uGq2W|||66^la(bXEXG2)1Oh|ZL*qe^y*k`{*Oh<y|k<zAY!v7>)QgobFh
zYmLiMr<D;pkDRr{Jc-x(qkF|8dAKQP4qy}158oJ}W!71-vWpkP?IItIL}xEa+T1aH
z#SIP7*{*wBj=HV1P<ZrE%gp<zq9A|R#z-x`&WaUX%t3_#M-GR`OzJwUB)90%f{;HB
zM+!vSmp*b=YFqWAG2~Cc5d%^CNnMOeb!#3S4>I&Pk|^rDBxy#6vlg4@(FDQnP@bt>
ou=o=1(2~<5DW);g$1(YHK~0}OeQo^8z`(%Z>FVdQ&MBb@0KqL1F#rGn

literal 0
HcmV?d00001

diff --git a/img/voxel/2.png b/img/voxel/2.png
new file mode 100644
index 0000000000000000000000000000000000000000..b2a87dab609a85c41e96c8585eb2c743727e85ff
GIT binary patch
literal 580
zcmeAS@N?(olHy`uVBq!ia0y~yU`PRB4mJh`hJr^^Ll_vCxIJAQLn;{G9(2rNao}M-
zc<sOZ+AoIFTU#ZPB*K?IS~Ib0vzyjAsg)MlOK8LCSn-HI$WZ5zqNp>yD0vsrc(0=y
zI@&{cJSn1T1VU>xMGq^<1sSRkq&_ZP@u)e3r@O-A=mgTKIi^8{*F26!DvPG~h9Efo
o9a>`E7^3@KM4!i#9AEa6FS&ibB_I8ofq{X+)78&qol`;+05Ept4FCWD

literal 0
HcmV?d00001

diff --git a/img/voxel/3.png b/img/voxel/3.png
new file mode 100644
index 0000000000000000000000000000000000000000..6943013991b8ea6159b99308bd7a3ba910eeb7fb
GIT binary patch
literal 1090
zcmeAS@N?(olHy`uVBq!ia0y~yU`PRB4mJh`hJr^^Ll_uXI6Yk)Ln;{G9*oX=?7_ft
zaLsS|U1l3Ev@ckgy76X>M3ReE-t>uGw^Nrq;&!zOiE+`|=W#?@RNd>Sr&37agbx0Y
zISQie-4OvB7k7wi@lES$cKNd?iCs`TR7OYCx;tWF(xMJVQFia6eM)R0K0<~I9wn^2
z5qM-lSFaKqSV@;e$VL#qd1;cnpma!%fZ+;=5;jq37oJrX5n5$p8y$}}bnt>qpX-_v
zV5pGP+||4^DP2%Hgs0;M*u=;qY@*CcY@u@$M6J7TtVmkg;V7!^ag<TXY(<1-lEYEY
zpu!0qj-uMGYeEVag~+HR1svrPWY+SV(#7l=6LR!qP~nCS?o}3%T7CkBilX8Zx+c5C
zxE$qEiVOLpAgbQEV?r0Nl3mC~1yS{`9TU131+_zTJdS!Q>8*OiEZD3Sx8xCvpm_L4
zw<Bz#`XHn17bQ6!VG;EY`l$5CSybEQkD;i)lG@6ONnPrK%vyDVAKgO*tyffd9G%?Z
zD4Oqb=U?E*30>_SoLX^Uwu&gfpm3<hqiri5d1}ci<+ZP@nAp|caa&PKY>AWLc4v^I
zx^}!>_oz3-#^p{~;KxP~y=+y4qNu)7p0k#j$I+&a+v~N|ypHlK<>iO^OzDbuxg!Rm
zrz++BUp+%ZRM@p<VpnI7VdRnND`sejPIj&7MCDHG@+2(#wq8_wNz$f{+l#u)L8{-b
z?P6UyL+8=A)m`E%Z)iL+Tk^<LE39jWZ|K618jVNWy1AA<5*OTlH*{r%@}sg2Em8Z9
z9kR>3K(0;Hn$jgMxZPE>YsLzvl@)@8zuk{^cW`P==~4%Y+IL8Ve4NmwE@-_%>EDX3
zco!Z}@O5{1YRv<MuC_}JD6HaKd;&HqJnCOz5uhdJk`wUJ?Z{D3D&tmS3$0Ojv`EWu
zLYKVDnt+W#M~;TfQ4zK8_z`fFO;9|juqkAZ;73rx6%Q<I3W;$!(i$S8BPuRX=qSqW
zb(Ga5CgiANP~oNyMp6F2qtb%ST6`0_CcCZ)*%)+WK^OCqM=pZQT47x`79^#wwD3H#
zplhm<*{U0XT7E)?E0P?Ju!&lG9pzLqTOlE^(eY?sP+?OCuNIq2PQb>+A#*^<nNd(W
z<c)@?dWS^FMn{lx&!e15Y@s<I<$fULj-t}8JgaVaYWWEmu1H$k;V5biRszmbN$M*t
z9FH_~bt;9e09h)qG3Y3tQe9wS1IYB&E?HL{P>A>meQfM%c3JU=Wu-;r5oytQB~fvq
jj{zT3g9>-|{AcLxU>B57ENy0BU|{fc^>bP0l+XkK2f3w_

literal 0
HcmV?d00001

diff --git a/img/voxel/4.png b/img/voxel/4.png
new file mode 100644
index 0000000000000000000000000000000000000000..81bc966f205904e8637abcbff33ba0d9276a9f40
GIT binary patch
literal 764
zcmeAS@N?(olHy`uVBq!ia0y~yU`PRB4mJh`hJr^^Ll_vC4tu&dhEy=VJs3FYR)mPl
z!QkKVC1*ST74*Cn6XQ6zxYRh<aN5MKjXfbfsY{Y{ltq&zS4y1rI2z%mb<8M;u+$!p
zBmYBs?k{=Ns`M|waNm+g3p!-AL_YR*b$cIeR+0;Fty%o&P|(MQj>#c0AzJT53O99e
zdmWWkid*t1DX6f$Lwx0q86j^(J|>BZPwJ9Yy0_qwQ_x1|BeO$dT(tfvKI+xdQxg3z
z@X<|Fd}5ch(!Dj0l!6MKk0@#V6DVx&YF+xMt)n$W&_7_~jF6m;9SvQsOOl+Aw1(`7
z)G~94@i{8JG|Bl0Yv>+N5I5wgG*~utPXve?bCeq-yWo*)&_>0ifR9QmcYr7+B&uem
zMWoh0#iW43O(Aat3|CkLYL#{E*wH1tG^xGA@n~nz#^57Af(n~L?r1)Gq~$lE%i5(!
zU(|mZh>q8qry*+X+Ot2z##5`TOQL>d#iWooB8K}yKeDX6p_x>(`Vl8c|BaBs0FeA_
zEk3WKeuBxtM;$@ZcR~ssK*HvsG84MyDjo9`Wnc1$4<yaFa)<Mg8zAX-0)~03Dgw0L
zi5QxN+GvQDcS+3FlAF@S?$VPF;`4)T4bbB2kl4SnB0!6;OJaYBjfSW{$SVq>{z4mr
zkIE~Vg$Q=9wonk2S4t`bS<>vHv+B`;keUe{uAwqhy7+}R&gfG2INIJB;c;~Gl1I$0
zItw0k27O$pbZ^C@lR+O3g5r#2<qt+sl&Y-!p$MW`R{ls-idz7ZcXpk#<Ppot9UUF&
zD=a*<^wb_XimH1Zb#=Y7@KMT2370zoADQr{xF7tDOs777U$g810|Nttr>mdKI;Vst
E00;g;DgXcg

literal 0
HcmV?d00001

diff --git a/img/voxel/5.png b/img/voxel/5.png
new file mode 100644
index 0000000000000000000000000000000000000000..ec347a49cf36b2e7cc5b82de0b42447884f3f051
GIT binary patch
literal 752
zcmeAS@N?(olHy`uVBq!ia0y~yU`PRB4mJh`hJr^^Ll_vCwtKobhEy=VJ=i!=#*>Hn
zVAFrM$ETa7mmHt>G^Zp@Yn^FO;o6B^*}Wk#*-IWpDT`j0TDjwz$I-2BBuVKDesmVq
zpU`zwsV!7zYFDa~T+l`jEwRpuh@(O)BNQGT*0R$Pl^5ISa+H1PBWI;)t9~?u)Hoa|
z66N<kdRQrL(Idx|6#++1huEly@^@CO>|$T?NKsHftS~}LPT*saX#3Jf8#?p@3j?(H
zx_=0XvM+tKphG{n&_j!_^GA><`;tc!I`l&e9pK!C4*hUL9Z_}{nUIg{g6yF@-bWb)
z+e7{=?Qqs=TbdMcgi+L9q|o8$f)Ji=iv^FwmD)miypC?@NEF>KVz?$LK&#D_XO)DI
z;R>ReB8DrHJV@2H`p43aMA7CTL!CzrUGW_fVIS=mb?u+hl_<y_@+aU3qiAzbp~DeI
z(f=Bc8oCl!S|~hP&}H9Yu_7r#i?5?1K=k7Rkf_Qd?@*ZuUCv7TLXI-7w19G(mG=1@
zRa|MIvPx;6%TdRb7CMi-Lu96OvAgVvIhwe#!sAGHsLZskc9%UNN11~@F6fxPvcf}4
zPVA$QD8JWHb{C!Sj~ha2JdOm3%1`Lx?}}LV$T?`E!;$vTnh1Ejsy$K^?Ou|!u_IB`
xd+8%prMeZ5Sc5*YF6x@@O=<!{OLiaS7YSYa+<$QLS_TFN22WQ%mvv4FO#mhYEBF8a

literal 0
HcmV?d00001

-- 
GitLab