コード例 #1
0
bool TestANN_SingleClassificationPSO(){
    
    // File Object to save data
    FileObject file;
    
    // define random number generator instance
    RandomNumberGenerator rng;
    
    // define number of data values
    const int N = 100;
    
    // set training data
    std::vector<double> x(N*N), y(N*N), z(N*N);
    for(int i = 0; i < N; i++){
        for( int j = 0; j < N; j++ ){
            int k = i+N*j;
            x[k] = i/static_cast<double>(N);
            y[k] = j/static_cast<double>(N);
            z[k] = binaryField(x[k],y[k]);
        }
    }
    
    // set the layers
    std::vector<int> layers { 2, 3, 3,  1 };
    
    // create classifier
    NeuralNet classifier( layers );
    classifier.setActivationFunc(1, NeuralPrototypes::prototypes.getFunction(NeuralPrototypes::Poly) );
    classifier.setActivationFunc(layers.size()-1, NeuralPrototypes::prototypes.getFunction(NeuralPrototypes::Sigmoid) );
    
    la::Mat<double> guess(classifier.numWeights(),1,0);
    la::Mat<double> lb(classifier.numWeights(),1,0), ub(classifier.numWeights(),1,0);
    
    // Try to classify given inputs
    for( int i = 0; i < classifier.numWeights(); i++ ){
        lb[i] = -3; ub[i] = 3;
    }
    
    
    PSO gd;
    gd.setMaxIter(100);
    gd.setdims(lb, ub);
    gd.setLocalStep(0.1);
    gd.setGlobalStep(0.01);
    gd.setNumParticles(5);
    gd.func.net = &classifier;
    gd.func.x   = &x;
    gd.func.y   = &y;
    gd.func.z   = &z;
    gd.func.init();
    gd.showStatus();
    gd.solve();
    
    la::Mat<double> in(2,1,0), out(2,1,0);
    gd.soln().print();
    
    for( int i = 0; i < classifier.numWeights(); i++ ){
        classifier.weightAt(i) = gd.soln()[i];
    }
    
    // save truth data
    file.openFile("/Users/christianjhoward/truth.csv", FileObject::Write);
    if( file.isOpen() ){
        for( int i = 0; i < x.size(); i++ ){
            fprintf(file.ref(), "%0.6lf, %0.6lf, %0.6lf\n",x[i],y[i],z[i]);
        }
    }
    
    // save results
    file.openFile("/Users/christianjhoward/approx.csv", FileObject::Write);
    if( file.isOpen() ){
        for( int i = 0; i < x.size(); i++ ){
            in[0] = x[i];
            in[1] = y[i];
            classifier(in,out);
            fprintf(file.ref(), "%0.6lf, %0.6lf, %0.6lf\n",x[i],y[i],out[0]);
        }
    }
    
    
    return true;
}
コード例 #2
0
ファイル: testqgsfield.cpp プロジェクト: alexbruy/QGIS
void TestQgsField::displayString()
{
  QgsField stringField( QStringLiteral( "string" ), QVariant::String, QStringLiteral( "string" ) );

  //test string value
  QString test( QStringLiteral( "test string" ) );
  QCOMPARE( stringField.displayString( test ), test );

  //test NULL
  QgsApplication::setNullRepresentation( QStringLiteral( "TEST NULL" ) );
  QVariant nullString = QVariant( QVariant::String );
  QCOMPARE( stringField.displayString( nullString ), QString( "TEST NULL" ) );

  //test int value in string type
  QgsField intField( QStringLiteral( "int" ), QVariant::String, QStringLiteral( "int" ) );
  QCOMPARE( intField.displayString( 5 ), QString( "5" ) );
  QCOMPARE( intField.displayString( 599999898999LL ), QString( "599999898999" ) );

  //test int value in int type
  QgsField intField2( QStringLiteral( "int" ), QVariant::Int, QStringLiteral( "int" ) );
  QCOMPARE( intField2.displayString( 5 ), QString( "5" ) );
  QCOMPARE( intField2.displayString( 599999898999LL ), QString( "599,999,898,999" ) );

  //test long type
  QgsField longField( QStringLiteral( "long" ), QVariant::LongLong, QStringLiteral( "longlong" ) );
  QCOMPARE( longField.displayString( 5 ), QString( "5" ) );
  QCOMPARE( longField.displayString( 599999898999LL ), QString( "599,999,898,999" ) );

  //test NULL int
  QVariant nullInt = QVariant( QVariant::Int );
  QCOMPARE( intField.displayString( nullInt ), QString( "TEST NULL" ) );

  //test double value
  QgsField doubleField( QStringLiteral( "double" ), QVariant::Double, QStringLiteral( "double" ), 10, 3 );
  QCOMPARE( doubleField.displayString( 5.005005 ), QString( "5.005" ) );
  QgsField doubleFieldNoPrec( QStringLiteral( "double" ), QVariant::Double, QStringLiteral( "double" ), 10 );
  QCOMPARE( doubleFieldNoPrec.displayString( 5.005005 ), QString( "5.005005" ) );
  QCOMPARE( doubleFieldNoPrec.displayString( 5.005005005 ), QString( "5.005005005" ) );
  QCOMPARE( QLocale().numberOptions() & QLocale::NumberOption::OmitGroupSeparator, QLocale::NumberOption::DefaultNumberOptions );
  QCOMPARE( doubleFieldNoPrec.displayString( 599999898999.0 ), QString( "599,999,898,999" ) );

  //test NULL double
  QVariant nullDouble = QVariant( QVariant::Double );
  QCOMPARE( doubleField.displayString( nullDouble ), QString( "TEST NULL" ) );

  //test double value with German locale
  QLocale::setDefault( QLocale::German );
  QCOMPARE( doubleField.displayString( 5.005005 ), QString( "5,005" ) );
  QCOMPARE( doubleFieldNoPrec.displayString( 5.005005 ), QString( "5,005005" ) );
  QCOMPARE( doubleFieldNoPrec.displayString( 5.005005005 ), QString( "5,005005005" ) );
  QCOMPARE( doubleFieldNoPrec.displayString( 599999898999.0 ), QString( "599.999.898.999" ) );
  QCOMPARE( doubleFieldNoPrec.displayString( 5999.123456 ), QString( "5.999,123456" ) );

  //test value with custom German locale (OmitGroupSeparator)
  QLocale customGerman( QLocale::German );
  customGerman.setNumberOptions( QLocale::NumberOption::OmitGroupSeparator );
  QLocale::setDefault( customGerman );
  QCOMPARE( doubleField.displayString( 5.005005 ), QString( "5,005" ) );
  QCOMPARE( doubleFieldNoPrec.displayString( 5.005005 ), QString( "5,005005" ) );
  QCOMPARE( doubleFieldNoPrec.displayString( 5.005005005 ), QString( "5,005005005" ) );
  QCOMPARE( doubleFieldNoPrec.displayString( 599999898999.0 ), QString( "599999898999" ) );
  QCOMPARE( doubleFieldNoPrec.displayString( 5999.123456 ), QString( "5999,123456" ) );

  //test int value in int type with custom German locale (OmitGroupSeparator)
  QCOMPARE( intField2.displayString( 5 ), QString( "5" ) );
  QCOMPARE( intField2.displayString( 599999898999LL ), QString( "599999898999" ) );

  //test long type with custom German locale (OmitGroupSeparator)
  QCOMPARE( longField.displayString( 5 ), QString( "5" ) );
  QCOMPARE( longField.displayString( 599999898999LL ), QString( "599999898999" ) );

  //test value with custom english locale (OmitGroupSeparator)
  QLocale customEnglish( QLocale::English );
  customEnglish.setNumberOptions( QLocale::NumberOption::OmitGroupSeparator );
  QLocale::setDefault( customEnglish );
  QCOMPARE( doubleField.displayString( 5.005005 ), QString( "5.005" ) );
  QCOMPARE( doubleFieldNoPrec.displayString( 5.005005 ), QString( "5.005005" ) );
  QCOMPARE( doubleFieldNoPrec.displayString( 5.005005005 ), QString( "5.005005005" ) );
  QCOMPARE( doubleFieldNoPrec.displayString( 599999898999.0 ), QString( "599999898999" ) );
  QCOMPARE( doubleFieldNoPrec.displayString( 5999.123456 ), QString( "5999.123456" ) );

  //test int value in int type with custom english locale (OmitGroupSeparator)
  QCOMPARE( intField2.displayString( 5 ), QString( "5" ) );
  QCOMPARE( intField2.displayString( 599999898999LL ), QString( "599999898999" ) );

  //test long type with custom english locale (OmitGroupSeparator)
  QCOMPARE( longField.displayString( 5 ), QString( "5" ) );
  QCOMPARE( longField.displayString( 599999898999LL ), QString( "599999898999" ) );

  // binary field
  QgsField binaryField( QStringLiteral( "binary" ), QVariant::ByteArray, QStringLiteral( "Binary" ) );
  QString testBAString( QStringLiteral( "test string" ) );
  QByteArray testBA( testBAString.toLocal8Bit() );
  QCOMPARE( binaryField.displayString( testBA ), QStringLiteral( "BLOB" ) );
}