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; }
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" ) ); }