Example #1
0
inline void unpackAndAppendImpl(T &recv, std::tuple<A ...> &&tuple, std::index_sequence<I...>) {
    Func()(recv, std::get<I>(std::move(tuple))...);
}
Example #2
0
 function_property_map(Func f = Func()) : f(f) {}
Example #3
0
int main()
{
    srand((unsigned)time(NULL));

    int i, j, k, l, varw, varc1, varc2, vfun=4, vtest, vgen, temp; // iteration vars
    float w, c1, c2, edge, Vmax, goal, gb, res = 0, avggennew=0;  // gb is the global gbest
    float vel[coornum], pbest[coornum], gbest[coornum], results[4*testnum]; // Each bird's got their own gbest
    float absRadius; // Absolute perceptive radius
    float relRadius; // A iteration var for radius
    int radRec; // A var to count the index of the radius
    int adjmat[N][N]; // Adjacent Matrix

    char buffer[19]; // A buffer to write the file, 15 is the estimated char numbers
    char storage[19*relRange];


    /* Storage Section */
//The strategy is: we store the 'sum' into 'aves'.
//When the time comes they got loaded into the file, we'll have them become real 'average'

    float AveOptGen[relRange];  // FuncNumber*RadiusNumber: Every 19[radius] with a func
    float AveOptRate[relRange];  // FuncNumber*RadiusNumber: Every 19[radius] with a func
    float AveDeg[relRange][gennum/aveDegInterval+1];  // [FuncNumber*RadiusNumber][Every 10 gen]
                                            //So the truth is, we're getting the average(a matrix) of average(a test)
    float AveOptFit[relRange][gennum/aveDegInterval+1]; // The average of the gbest fitness in the end of each test (last generation)
    /* End of Storage Section */


    for(i=0;i<relRange;i++){
        AveOptGen[i]=0;
        AveOptRate[i]=0;
        for(j=0;j<gennum/aveDegInterval;j++){
            AveDeg[i][j]=0;
            AveOptFit[i][j]=0;
        }

    }

    for(i=0;i<19*relRange;i++){
        storage[i]=' ';
    }


    radRec=0; // Set the radius index counting number

for(relRadius=0.24;relRadius<1.01;relRadius+=0.02){ // Loop layer 1 (relRadius)

    w = 0.6;
    for(varw = 0; varw < 1; varw++)
    {
        c1 = 1.7;
        for(varc1 = 0; varc1 < 1; varc1++)
        {
            c2 = 1.7;
            for(varc2 = 0; varc2 < 1 ; varc2++)
            {


                        edge = 600;
                        Vmax = edge;
                        goal = 0.1;

                    int ngoal = 0, avggen = 0; // Goal achieving flag & Average generations

                    for(i = 0; i < testnum; i++)
                    {
                        results[4*i] = gennum;
                        results[4*i+1] = 0;
                        results[4*i+2] = gennum;
                        results[4*i+3] = 0;
                    }


                    for(vtest = 0; vtest < testnum; vtest++)  // Run the experiment
                    {
                        double neoDiag=0;
                        double dist=0;
                        int sum = 1;

                        absRadius = relRadius * sqrt(dim * pow(2 * edge , 2));

                        for(i = 0; i < coornum; i++)
                        {
                            pbest[i] = INT_MAX;
                            gbest[i] = INT_MAX;
                        }

                        //Initialization:

                        for(i = 0; i < dim + 1; i++)
                        {
                            for(j = 0; j < N; j++)
                            {
                                if(i < dim)
                                {
                                    coor[(dim+1)*j+i] = (double)rand() / RAND_MAX *  2 * edge - edge;
                                    vel[(dim+1)*j+i] = (double)rand() / RAND_MAX * 2 * Vmax - Vmax;
                                    pbest[(dim+1)*j+i] = coor[(dim+1)*j+i];
                                    gbest[(dim+1)*j+i] = coor[(dim+1)*j+i];

                                }
                                else
                                { // i=dim

                                        Func(j);
                                    // Initializing pbest
                                    pbest[(dim+1)*j+i] = coor[(dim+1)*j+i];
                                    gbest[(dim+1)*j+i] = coor[(dim+1)*j+i];
                                    /*
                                    if(coor[(dim+1)*j+i] < gbest[(dim+1)*j+i])
                                    {
                                        for(l = 0; l < dim + 1; l++)
                                            gbest[(dim+1)*j+l] = coor[(dim+1)*j+l];

                                    }
                                    for(k = 0; k < N; k++)
                                        if( gbest[(dim+1)*j+i] < gbest[(dim+1)*k+i])
                                        {

                                            for(l = 0; l < dim + 1; l++)
                                                gbest[(dim+1)*k+l] = gbest[(dim+1)*j+l];
                                        }
                                    */
                                } // End of the condition i = dim
                            } // for birds



                        } // for dims

                        //neoDiag=0;
                        // Producing the initiating Adjacent Matrix
                        for(j=0;j<N;j++)
                            for(k=0;k<N;k++) // Avoid Relapse
                            {
                                dist=getDistance(j,k);
                                if( dist <= absRadius && j!=k ) // k Can be perceived by j
                                    {
                                        adjmat[j][k]=1;
                                    }
                                else{
                                    adjmat[j][k]=0;
                                }
                               /* if(dist>neoDiag){
                                    printf("%d,%d,%f\n",j,k,dist);
                                    neoDiag=dist;
                                }
                                */

                            }
                        // End of producing the initiating Adjacent Matrix

                        for( j=0; j<N ; j++ )
                                for( k=0; k<N ; k++ )
                                    if( adjmat[j][k] != 0) // k Can be perceived by j
                                        temp+=1;
                        temp/=N;
                        AveDeg[radRec][0]+=temp; // Got it

                        // Updating each bird's gbest:
                        for(j=0;j<N;j++){
                             for(k=0;k<N;k++)
                                if( adjmat[j][k] != 0 ){// k Can be perceived by j
                                        // Updating the gbest of j
                                        //printf("%f\t",getDistance(j,k));
                                        if( coor[(dim+1)*k+dim] < gbest[(dim+1)*j+dim] ){
                                            for(l=0;l<=dim;l++)
                                                gbest[(dim+1)*j+l] = coor[(dim+1)*k+l];
                                    }
                                }
                                //printf("gbest of %d:%f\nfitness of %d:%f\n",j,gbest[(dim+1)*j+dim],j,coor[(dim+1)*j+dim]);
                        }

                        gb = gbest[dim]; // Updating the global gbest
                        for(i = 1; i < N; i++)
                            if(gbest[(dim+1)*i+dim] < gb)
                                gb = gbest[(dim+1)*i+dim];
                        AveOptFit[radRec][0]+=gb;

                        // End of Updating each bird's gbest in initialization


                        for(vgen = 0; vgen < gennum; vgen++)         // Evolution
                        {
                            float aveDegree=0; // Average Degree


                            for(i = 0; i < dim + 1; i++)
                            {
                                for(j = 0; j < N; j++)
                                {
                                    if(i < dim)
                                    {
                                        float r1 = (double)rand() / RAND_MAX * 1;
                                        float r2 = (double)rand() / RAND_MAX * 1;
                                        vel[(dim+1)*j+i] = w * vel[(dim+1)*j+i] + c1 * r1 * (pbest[(dim+1)*j+i] - coor[(dim+1)*j+i])\
                                                           + c2 * r2 * (gbest[(dim+1)*j+i] - coor[(dim+1)*j+i]);

                                        coor[(dim+1)*j+i] += vel[(dim+1)*j+i];

                                    }
                                    else  // i = dim
                                    {

                                            Func(j);
                                        // When i = dim, updating pbest:
                                        if(coor[(dim+1)*j+i] < pbest[(dim+1)*j+i])
                                            for(l = 0; l < dim + 1; l++)
                                                pbest[(dim+1)*j+l] = coor[(dim+1)*j+l];

                                         // Comparing itself with gbest:
                                        if(coor[(dim+1)*j+i] < gbest[(dim+1)*j+i])
                                            for(l = 0; l < dim + 1; l++)
                                                gbest[(dim+1)*j+l] = coor[(dim+1)*j+l];


                                    } // End of else
                                } // for birds
                            } // for dims

                            if( (vgen+1) % (100*aveDegInterval) == 0 && vgen!=0)
                            {
                                //printf("%d,%f\n",vgen,neoDiag);
                                absRadius=relRadius*neoDiag;
                            }

                            neoDiag=0;

                            // Producing the initiating Adjacent Matrix
                            for( j=0; j<N ; j++ )
                                for( k=0; k<N; k++) // Avoid Relapse
                                    {
                                        dist=getDistance(j,k);
                                        if( dist <= absRadius && j!=k ) // k Can be perceived by j
                                        {
                                            adjmat[j][k]=1;
                                        }
                                        else{
                                                adjmat[j][k]=0;
                                        }

                                        if( (vgen+1) % (100*aveDegInterval) == 999 )
                                            if(dist>neoDiag){
                                                neoDiag=dist;
                                                //printf("%d,%d,dist:%f\t",j,k,dist);
                                            }

                                    }
                                    //if(neoDiag!=0)
                                    //printf("%d,%f\n",vgen,neoDiag);
                            // End of producing the initiating Adjacent Matrix

                            //Caculating Average Degree of the generation
                            if( (vgen+1) % aveDegInterval == 0 ){
                                for( j=0; j<N ;j++ )
                                    for( k=0; k<N ;k++ )
                                        if( adjmat[j][k] != 0) // k Can be perceived by j
                                            aveDegree+=1;
                                aveDegree/=N; // Got it
                                AveDeg[radRec][(vgen+1) / aveDegInterval] += aveDegree; // Storing Average Degree of this particular generation
                            }


                            // Updating each bird's gbest:
                            for( j=0; j<N ;j++ ){
                                for( k=0; k<N ;k++ )
                                    if( adjmat[j][k] != 0 ) // k Can be perceived by j
                                        // Updating the gbest of j
                                        if( coor[(dim+1)*k+dim] < gbest[(dim+1)*j+dim] )
                                            for(l=0;l<=dim;l++)
                                                gbest[(dim+1)*j+l] = coor[(dim+1)*k+l];
                                //printf("gbest of %d:%f\nfitness of %d:%f\n",j,gbest[(dim+1)*j+dim],j,coor[(dim+1)*j+dim]);
                            }
                            // End of Updating each bird's gbest

                            gb = gbest[dim]; // Updating the global gbest
                            for(i = 1; i < N; i++)
                                if(gbest[(dim+1)*i+dim] < gb)
                                    gb = gbest[(dim+1)*i+dim];

                                if( (vgen+1) % aveDegInterval == 0 ){
                                AveOptFit[radRec][(vgen+1) / aveDegInterval]+=gb;
                            }

                            if(gb < goal && sum != 0)
                            {
                                results[4*vtest] = (double)vgen+1;
                                results[4*vtest+1] = gb;
                                sum = 0;
                                printf("\ngb:%f,%d\t",gb,vgen);
                                //ngoal++;
                                //break;
                            }
                            if(vgen == gennum - 1)
                            {
                                results[4*vtest+2] = gennum;
                                results[4*vtest+3] = gb;
                                 printf("lastgb:%f\n",gb);
                            }


                        } // for vgens


                        printf("\nTest%d for Function%d of relRadius%f is done. The next one's coming at ya.\n\n",vtest,vfun,relRadius);

                    } // for vtest

                    for(i = 0; i < testnum; i++)
                    {
                        if(results[4*i] != gennum)
                        {
                            ngoal++;
                            avggen += results[4*i];
                            res += results[4*i+1];
                        }
                    }
                    printf("%d,%d", avggen, ngoal);
                    if(ngoal == 0)
                        avggennew = (double)gennum;
                    else
                        avggennew = (double)avggen / ngoal;

                    printf("AVGEN:%f\t",avggennew);
                    AveOptGen[radRec]=avggennew;
                    printf("AVRATE:%f",(double)ngoal / testnum * 100);
                    AveOptRate[radRec]=(double)ngoal / testnum * 100;

                    printf("Function%d is tested under this radius.\n", vfun);

                c2 += 0.1;
            }
            c1 += 0.1;
        }
        w += 0.1;
    }
//} // End of Loop layer 2 (population)

    radRec++;

    printf("\n\nRadius %d is tested\n\n",radRec);

} // End of Loop layer 1 (relRadius)
    printf("\n\n Done! You got it, dude!");

    for(i=0;i<relRange;i++)
        for(j=0;j<=(gennum/aveDegInterval);j++){
            AveDeg[i][j]=(double)AveDeg[i][j]/testnum;
            AveOptFit[i][j]=(double)AveOptFit[i][j]/testnum;
        }

// Get da data in da file!
    sprintf(storage,"Gen,");
    for(i=0;i<relRange;i++){
        sprintf(buffer,"AvDeg%d,",i);
        strcat(storage,buffer);
    }


    pso = fopen("vicpsoFunc4-adjmat.txt", "w");
    fprintf(pso, "RelRadius,AveOptGen,AveOptRate,AveDeg\n");
    for(i=0;i<relRange;i++){
        fprintf(pso, "%f,%f,%f\n",0.24+i*0.02,AveOptGen[i],AveOptRate[i]);
    }
    fclose(pso);

    pso = fopen("vicpsoFunc4-adjmat-AveDeg.txt", "w");
    fprintf(pso, "%s\n",storage );
        for(j=0;j<=(gennum/aveDegInterval);j++){
            int inIte;
            fprintf(pso,"%d,",j*10);
            for(inIte=0;inIte<relRange;inIte++){
                fprintf(pso, "%f,",AveDeg[inIte][j]);
            }
            fprintf(pso, "\n");
        }


    fclose(pso);

    pso = fopen("vicpsoFunc4-OptFit.txt", "w");
    fprintf(pso, "%s\n",storage );

        for(j=0;j<=(gennum/aveDegInterval);j++){
            int inIte;
            fprintf(pso,"%d,",j*10);
            for(inIte=0;inIte<relRange;inIte++){
                fprintf(pso, "%f,",AveOptFit[inIte][j]);
            }
            fprintf(pso, "\n");
        }
    fclose(pso);

    return 0;

} // End of main
Example #4
0
Val FuncTerm::val(Grounder *grounder) const
{
	ValVec vals;
	foreach(const Term &term, args_) vals.push_back(term.val(grounder));
	return Val::create(Val::FUNC, grounder->index(Func(grounder, name_, vals)));
}
 void Apply(Bitmap& bmp) const override{
   Func(bmp);
 }
Example #6
0
 GLM_FUNC_QUALIFIER static tvec4<T, P> call(T (*Func) (T x, T y), tvec4<T, P> const & a, T b)
 {
     return tvec4<T, P>(Func(a.x, b), Func(a.y, b), Func(a.z, b), Func(a.w, b));
 }
Example #7
0
 GLM_FUNC_QUALIFIER static tvec4<R, P> call(R (*Func) (T x), tvec4<T, P> const & v)
 {
     return tvec4<R, P>(Func(v.x), Func(v.y), Func(v.z), Func(v.w));
 }
Example #8
0
int main () {
char a;
cin>>a;
cout<<Func(a);
return 0;
}
Example #9
0
int main(int argc, char **argv) {

    // Google logging needed for parts of caffe that were extracted

    // Network structure
    // data - conv - reLU - pool - fc - softmax

    std::vector<Layer*> network;

    // Description of the neural network

    int N = 100; // number of samples/batch_size
    int d_w = 32; // data width
    int d_h = 32; // data height
    int ch = 3; // number of channels

    Image<float> data(32, 32, 3, 100);
    DataLayer * d_layer = new DataLayer(d_h, d_w, ch, N, data);
    network.push_back(d_layer);
    printf("data out size %d x %d x %d x %d\n", d_layer->out_dim_size(0),
                                                d_layer->out_dim_size(1),
                                                d_layer->out_dim_size(2),
                                                d_layer->out_dim_size(3));
    int n_f = 32; // number of filters
    int f_w = 7;  // filter width
    int f_h = 7;  // filter height
    int pad = (f_w-1)/2; // padding required to handle boundaries
    int stride = 1; // stride at which the filter evaluated

    Convolutional * conv  = new Convolutional(n_f, f_w, f_h, pad,
                                              stride, d_layer);
    network.push_back(conv);
    printf("conv out size %d x %d x %d x %d\n", conv->out_dim_size(0),
                                                conv->out_dim_size(1),
                                                conv->out_dim_size(2),
                                                conv->out_dim_size(3));

    ReLU * relu = new ReLU(conv);
    network.push_back(relu);

    int p_w = 2; // pooling width
    int p_h = 2; // pooling height
    int p_stride = 2; // pooling stride

    MaxPooling * pool = new MaxPooling(p_w, p_h, p_stride, relu);
    network.push_back(pool);
    printf("pool out size %d x %d x %d x %d\n", pool->out_dim_size(0),
                                                pool->out_dim_size(1),
                                                pool->out_dim_size(2),
                                                pool->out_dim_size(3));

    Flatten * flatten = new Flatten(pool);
    network.push_back(flatten);
    printf("flatten out size %d x %d\n", flatten->out_dim_size(0),
                                         flatten->out_dim_size(1));

    int C = 10; // number of classes

    Affine * fc = new Affine(C, flatten);
    network.push_back(fc);
    printf("fc out size %d x %d\n", fc->out_dim_size(0),
                                    fc->out_dim_size(1));

    SoftMax * softm = new SoftMax(fc);
    network.push_back(softm);
    printf("softm out size %d x %d\n", softm->out_dim_size(0),
                                       softm->out_dim_size(1));

    Image<float> scores(C, N);
    Image<int> labels(N);


    softm->back_propagate(Func(labels));

    // Schedule
    conv->forward.compute_root();
    pool->forward.compute_root();
    fc->forward.compute_root();
    softm->forward.compute_root();
    conv->f_param_grads[0].compute_root();
    conv->f_param_grads[1].compute_root();
    conv->f_in_grad.compute_root();
    fc->f_param_grads[0].compute_root();
    fc->f_param_grads[1].compute_root();
    fc->f_in_grad.compute_root();
    pool->f_in_grad.compute_root();

    conv->f_param_grads[0].print_loop_nest();

    // Build
    std::vector<Func> outs;
    outs.push_back(softm->forward);
    outs.push_back(conv->f_param_grads[0]);
    Pipeline p(outs);

    timeval t1, t2;
    gettimeofday(&t1, NULL);
    p.realize({scores, conv->param_grads[0]});
    gettimeofday(&t2, NULL);

    float time = (t2.tv_sec - t1.tv_sec) +
        (t2.tv_usec - t1.tv_usec) / 1000000.0f;
    printf("First JIT time: %f\n", time);


    gettimeofday(&t1, NULL);
    p.realize({scores, conv->param_grads[0]});
    gettimeofday(&t2, NULL);

    time = (t2.tv_sec - t1.tv_sec) +
        (t2.tv_usec - t1.tv_usec) / 1000000.0f;
    printf("Second JIT time: %f\n", time);

    for (Layer* l: network)
        delete l;

    return 0;
}
Example #10
0
unsigned PtrFunc(int (*Func)(int), int X) {
  return Func(X);
}
Example #11
0
  /**
   * This bracketing algorithm was taken from
   *    http://cxc.harvard.edu/sherpa/methods/fminpowell.py.txt
   * and converted to C++.
   */
  void Photometry::minbracket(double &xa, double &xb, double &xc, double &fa, double &fb,
      double &fc, double Func(double par, void *params), void *params) {
    double eps = 1.0e-21;
    double Gold = 1.618034;
    double GrowLimit = 110;
    int maxiter = 1000;

    fa = Func(xa, params);
    fb = Func(xb, params);
    if (fa < fb) {
      double tmp = xa;
      xa = xb;
      xb = tmp;
      tmp = fa;
      fa = fb;
      fb = tmp;
    }
    xc = xb + Gold * (xb - xa);
    fc = Func(xc, params);
    int iter = 0;

    while (fc < fb) {
      double tmp1 = (xb - xa) * (fb - fc);
      double tmp2 = (xb - xc) * (fb - fa);
      double val = tmp2 - tmp1;
      double denom;
      if (fabs(val) < eps) {
        denom = 2.0 * eps;
      } else {
        denom = 2.0 * val;
      }
      double w = xb - ((xb -xc) * tmp2 - (xb - xa) * tmp1) / denom;
      double wlim = xb + GrowLimit * (xc - xb);
      if (iter > maxiter) {
        IString msg = "Maximum iterations exceeded in minimum bracketing ";
        msg += "algorithm (minbracket) - root cannot be bracketed";
        throw IException(IException::User, msg, _FILEINFO_);
      }
      iter = iter + 1;
      double fw;
      if (((w-xc)*(xb-w)) > 0.0) {
        fw = Func(w, params);
        if (fw < fc) {
          xa = xb;
          xb = w;
          fa = fb;
          fb = fw;
          return;
        } else if (fw > fb) {
          xc = w;
          fc = fw;
          return;
        }
        w = xc + Gold * (xc - xb);
        fw = Func(w, params);
      } else if (((w-wlim)*(wlim-xc)) >= 0.0) {
        w = wlim;
        fw = Func(w, params);
      } else if (((w-wlim)*(xc-w)) > 0.0) {
        fw = Func(w, params);
        if (fw < fc) {
          xb = xc;
          xc = w;
          w = xc + Gold * (xc - xb);
          fb = fc;
          fc = fw;
          fw = Func(w, params);
        }
      } else {
        w = xc + Gold * (xc - xb);
        fw = Func(w, params);
      }
      xa = xb;
      xb = xc;
      xc = w;
      fa = fb;
      fb = fc;
      fc = fw;
    }
    return;
  }
Example #12
0
/**
* This is the main entry point of a native application that is using
* android_native_app_glue.  It runs in its own thread, with its own
* event loop for receiving input events and doing other things.
*/
void android_main(struct android_app* state) {
	struct engine engine;

	memset(&engine, 0, sizeof(engine));
	state->userData = &engine;
	state->onAppCmd = engine_handle_cmd;
	state->onInputEvent = engine_handle_input;
	engine.app = state;

	// Prepare to monitor accelerometer
	engine.sensorManager = ASensorManager_getInstance();
	engine.accelerometerSensor = ASensorManager_getDefaultSensor(engine.sensorManager,
		ASENSOR_TYPE_ACCELEROMETER);
	engine.sensorEventQueue = ASensorManager_createEventQueue(engine.sensorManager,
		state->looper, LOOPER_ID_USER, NULL, NULL);

	if (state->savedState != NULL) {
		// We are starting with a previous saved state; restore from it.
		engine.state = *(struct saved_state*)state->savedState;
	}

	engine.animating = 1;

	// loop waiting for stuff to do.

	while (1) {
		// Read all pending events.
		int ident;
		int events;
		struct android_poll_source* source;

		// If not animating, we will block forever waiting for events.
		// If animating, we loop until all events are read, then continue
		// to draw the next frame of animation.
		while ((ident = ALooper_pollAll(engine.animating ? 0 : -1, NULL, &events,
			(void**)&source)) >= 0) {

			// Process this event.
			if (source != NULL) {
				source->process(state, source);
			}

			// If a sensor has data, process it now.
			if (ident == LOOPER_ID_USER) {
				if (engine.accelerometerSensor != NULL) {
					ASensorEvent event;
					while (ASensorEventQueue_getEvents(engine.sensorEventQueue,
						&event, 1) > 0) {
						LOGI("accelerometer: x=%f y=%f z=%f",
							event.acceleration.x, event.acceleration.y,
							event.acceleration.z);
					}
				}
			}

			// Check if we are exiting.
			if (state->destroyRequested != 0) {
				engine_term_display(&engine);
				return;
			}
		}

		if (engine.animating) {
			// Done with events; draw next animation frame.
			engine.state.angle += .01f;
			if (engine.state.angle > 1) {
				engine.state.angle = 0;
			}

			// Drawing is throttled to the screen update rate, so there
			// is no need to do timing here.
			engine_draw_frame(&engine);

			Func();
		}
	}
}
Example #13
0
File: main.cpp Project: CCJY/coliru
int ApplyFuncHelper(std::array<T, N> const& arr, std::index_sequence<Inds...>)
{
 return Func()(std::get<Inds, T, N>(arr)...);
}
Example #14
0
inline void unpackAndAppend(T &recv, A &&value) {
    Func()(recv, std::forward<A>(value));
}
// All-purpose routine for computing the L2-projection
// of various functions onto the gradient of the Legendre basis
//     (Unstructured grid version)
//
void L2ProjectGrad_Unst(
    const dTensor2* vel_vec,
    const int istart, 
    const int iend, 
    const int QuadOrder, 
    const int BasisOrder_qin,
    const int BasisOrder_auxin,
    const int BasisOrder_fout,
    const mesh& Mesh, 
    const dTensor3* qin, 
    const dTensor3* auxin, 
    dTensor3* fout, 
    void (*Func)(const dTensor2* vel_vec,
        const dTensor2&,const dTensor2&,
        const dTensor2&,dTensor3&))
{
    // starting and ending indeces
    const int   NumElems = Mesh.get_NumElems();
    assert_ge(istart,1);
    assert_le(iend,NumElems);

    // qin variable
    assert_eq(NumElems,qin->getsize(1));
    const int     meqn = qin->getsize(2);
    const int kmax_qin = qin->getsize(3);
    assert_eq(kmax_qin,(BasisOrder_qin*(BasisOrder_qin+1))/2);

    // auxin variable
    assert_eq(NumElems,auxin->getsize(1));
    const int       maux = auxin->getsize(2);
    const int kmax_auxin = auxin->getsize(3);
    assert_eq(kmax_auxin,(BasisOrder_auxin*(BasisOrder_auxin+1))/2);

    // fout variables
    assert_eq(NumElems,fout->getsize(1));
    const int mcomps_out = fout->getsize(2);
    const int  kmax_fout = fout->getsize(3);
    assert_eq(kmax_fout,(BasisOrder_fout*(BasisOrder_fout+1))/2);

    // number of quadrature points
    assert_ge(QuadOrder,1);
    assert_le(QuadOrder,5);
    int mpoints;
    switch ( QuadOrder )
    {
        case 1:
            mpoints = 0;
            break;

        case 2:
            mpoints = 1;
            break;

        case 3:
            mpoints = 6;
            break;

        case 4:
            mpoints = 7;
            break;

        case 5:	     
            mpoints = 16;
            break;
    }

    // trivial case
    if ( QuadOrder==1 )
    {
        for (int i=istart; i<=iend; i++)
        for (int m=1; m<=mcomps_out; m++) 
        for (int k=1; k<=kmax_fout; k++) 
        {  fout->set(i,m,k, 0.0 );  }
    }
    else
    {
        const int kmax = iMax(iMax(kmax_qin,kmax_auxin),kmax_fout);
        dTensor2    spts(mpoints,2);
        dTensor1    wgts(mpoints);
        dTensor2    xpts(mpoints,2);
        dTensor2   qvals(mpoints,meqn);
        dTensor2 auxvals(mpoints,maux);
        dTensor3   fvals(mpoints,mcomps_out,2);
        dTensor2      mu(mpoints,kmax); // monomial basis (non-orthogonal)
        dTensor2     phi(mpoints,kmax); // Legendre basis (orthogonal)
        dTensor2   mu_xi(mpoints,kmax_fout);   //  xi-derivative of monomial basis (non-orthogonal)
        dTensor2  mu_eta(mpoints,kmax_fout);   // eta-derivative of monomial basis (non-orthogonal)
        dTensor2  phi_xi(mpoints,kmax_fout);   //  xi-derivative of Legendre basis (orthogonal)
        dTensor2 phi_eta(mpoints,kmax_fout);   // eta-derivative of Legendre basis (orthogonal)
        dTensor2   phi_x(mpoints,kmax_fout);   //   x-derivative of Legendre basis (orthogonal)
        dTensor2   phi_y(mpoints,kmax_fout);   //   y-derivative of Legendre basis (orthogonal)

        switch ( QuadOrder )
        {
            case 2:
                spts.set(1,1, 0.0 );
                spts.set(1,2, 0.0 );

                wgts.set(1, 0.5 );
                break;

            case 3:
                spts.set(1,1,  0.112615157582632 );
                spts.set(1,2,  0.112615157582632 );

                spts.set(2,1, -0.225230315165263 );
                spts.set(2,2,  0.112615157582632 );

                spts.set(3,1,  0.112615157582632 );
                spts.set(3,2, -0.225230315165263 );

                spts.set(4,1, -0.241757119823562 );
                spts.set(4,2, -0.241757119823562 );

                spts.set(5,1,  0.483514239647126 );
                spts.set(5,2, -0.241757119823562 );

                spts.set(6,1, -0.241757119823562 );
                spts.set(6,2,  0.483514239647126 );

                wgts.set(1, 0.1116907948390055 );
                wgts.set(2, 0.1116907948390055 );
                wgts.set(3, 0.1116907948390055 );
                wgts.set(4, 0.0549758718276610 );
                wgts.set(5, 0.0549758718276610 );
                wgts.set(6, 0.0549758718276610 );
                break;

            case 4:
                spts.set(1,1,   0.000000000000000 );
                spts.set(1,2,   0.000000000000000 );

                spts.set(2,1,   0.136808730771782 );
                spts.set(2,2,   0.136808730771782 );

                spts.set(3,1,  -0.273617461543563 );
                spts.set(3,2,   0.136808730771782 );

                spts.set(4,1,   0.136808730771782 );
                spts.set(4,2,  -0.273617461543563 );

                spts.set(5,1,  -0.232046826009877 );
                spts.set(5,2,  -0.232046826009877 );

                spts.set(6,1,   0.464093652019754 );
                spts.set(6,2,  -0.232046826009877 );

                spts.set(7,1,  -0.232046826009877 );
                spts.set(7,2,   0.464093652019754 );	 

                wgts.set(1,  0.1125000000000000 );
                wgts.set(2,  0.0661970763942530 );
                wgts.set(3,  0.0661970763942530 );
                wgts.set(4,  0.0661970763942530 );
                wgts.set(5,  0.0629695902724135 );
                wgts.set(6,  0.0629695902724135 );
                wgts.set(7,  0.0629695902724135 );
                break;

            case 5:
                spts.set(1,1,   0.000000000000000 );
                spts.set(1,2,   0.000000000000000 );

                spts.set(2,1,   0.125959254959390 );
                spts.set(2,2,   0.125959254959390 );

                spts.set(3,1,  -0.251918509918779 );
                spts.set(3,2,   0.125959254959390 );

                spts.set(4,1,   0.125959254959390 );
                spts.set(4,2,  -0.251918509918779 );

                spts.set(5,1,  -0.162764025581573 );
                spts.set(5,2,  -0.162764025581573 );

                spts.set(6,1,   0.325528051163147 );
                spts.set(6,2,  -0.162764025581573 );

                spts.set(7,1,  -0.162764025581573 );
                spts.set(7,2,   0.325528051163147 );

                spts.set(8,1,  -0.282786105016302 );
                spts.set(8,2,  -0.282786105016302 );

                spts.set(9,1,   0.565572210032605 );
                spts.set(9,2,  -0.282786105016302 );

                spts.set(10,1, -0.282786105016302 );
                spts.set(10,2,  0.565572210032605 );

                spts.set(11,1, -0.324938555923375 );
                spts.set(11,2, -0.070220503698695 );

                spts.set(12,1, -0.324938555923375 );
                spts.set(12,2,  0.395159059622071 );

                spts.set(13,1, -0.070220503698695 );
                spts.set(13,2, -0.324938555923375 );

                spts.set(14,1, -0.070220503698695 );
                spts.set(14,2,  0.395159059622071 );

                spts.set(15,1,  0.395159059622071 );
                spts.set(15,2, -0.324938555923375 );

                spts.set(16,1,  0.395159059622071 );
                spts.set(16,2, -0.070220503698695 );

                wgts.set(1,  0.0721578038388935 );
                wgts.set(2,  0.0475458171336425 );
                wgts.set(3,  0.0475458171336425 );
                wgts.set(4,  0.0475458171336425 );
                wgts.set(5,  0.0516086852673590 );
                wgts.set(6,  0.0516086852673590 );
                wgts.set(7,  0.0516086852673590 );
                wgts.set(8,  0.0162292488115990 );
                wgts.set(9,  0.0162292488115990 );
                wgts.set(10, 0.0162292488115990 );
                wgts.set(11, 0.0136151570872175 );
                wgts.set(12, 0.0136151570872175 );
                wgts.set(13, 0.0136151570872175 );
                wgts.set(14, 0.0136151570872175 );
                wgts.set(15, 0.0136151570872175 );
                wgts.set(16, 0.0136151570872175 );
                break;
        }

        // Loop over each quadrature point and construct monomial polys
        for (int m=1; m<=mpoints; m++)
        {
            // coordinates
            const double xi   = spts.get(m,1);      
            const double xi2  = xi*xi;
            const double xi3  = xi2*xi;
            const double xi4  = xi3*xi;
            const double eta  = spts.get(m,2);
            const double eta2 = eta*eta;
            const double eta3 = eta2*eta;
            const double eta4 = eta3*eta;      

            // monomial basis functions at each gaussian quadrature point
            switch( kmax )
            {
                case 15:  // fifth order		    		    
                    mu.set(m, 15, eta4     );
                    mu.set(m, 14, xi4      );
                    mu.set(m, 13, xi2*eta2 );
                    mu.set(m, 12, eta3*xi  );
                    mu.set(m, 11, xi3*eta  );

                case 10:  // fourth order
                    mu.set(m, 10, eta3     );
                    mu.set(m, 9,  xi3      );
                    mu.set(m, 8,  xi*eta2  );
                    mu.set(m, 7,  eta*xi2  );

                case 6:  // third order
                    mu.set(m, 6,  eta2     );
                    mu.set(m, 5,  xi2      );
                    mu.set(m, 4,  xi*eta   );		    

                case 3:  // second order		    
                    mu.set(m, 3, eta       );
                    mu.set(m, 2, xi        );

                case 1:  // first order
                    mu.set(m, 1, 1.0       );

                    break;		    
            }

            // Loop over each quadrature point and construct Legendre polys
            for (int i=1; i<=kmax; i++)
            {
                double tmp = 0.0;
                for (int j=1; j<=i; j++)
                {  tmp = tmp + Mmat[i-1][j-1]*mu.get(m,j);  }

                phi.set(m,i, tmp );
            }	

            // Gradient of monomial basis functions at each gaussian quadrature point
            switch( kmax_fout )
            {
                case 15:  // fifth order
                    mu_xi.set( m,15,  0.0         );
                    mu_xi.set( m,14,  4.0*xi3     );
                    mu_xi.set( m,13,  2.0*xi*eta2 );
                    mu_xi.set( m,12,  eta3        );
                    mu_xi.set( m,11,  3.0*xi2*eta );

                    mu_eta.set( m,15, 4.0*eta3    );
                    mu_eta.set( m,14, 0.0         );
                    mu_eta.set( m,13, 2.0*xi2*eta );
                    mu_eta.set( m,12, 3.0*eta2*xi );
                    mu_eta.set( m,11, xi3 );

                case 10:  // fourth order
                    mu_xi.set( m,10,  0.0        );
                    mu_xi.set( m,9,   3.0*xi2    );			
                    mu_xi.set( m,8,   eta2       );
                    mu_xi.set( m,7,   2.0*eta*xi );

                    mu_eta.set( m,10, 3.0*eta2   );
                    mu_eta.set( m,9,  0.0        );
                    mu_eta.set( m,8,  2.0*eta*xi );
                    mu_eta.set( m,7,  xi2        );

                case 6:  // third order
                    mu_xi.set( m,6,  0.0      );
                    mu_xi.set( m,5,  2.0*xi   );			
                    mu_xi.set( m,4,  eta      );

                    mu_eta.set( m,6,  2.0*eta );			
                    mu_eta.set( m,5,  0.0     );
                    mu_eta.set( m,4,  xi      );

                case 3:  // second order
                    mu_xi.set( m,3,  0.0 );
                    mu_xi.set( m,2,  1.0 );

                    mu_eta.set( m,3, 1.0 );
                    mu_eta.set( m,2, 0.0 );

                case 1:  // first order
                    mu_xi.set( m,1,  0.0 );

                    mu_eta.set( m,1, 0.0 );
                    break;
            }

            // Loop over each quadrature point and construct Legendre polys
            for (int i=1; i<=kmax_fout; i++)
            {
                double tmp1 = 0.0;
                double tmp2 = 0.0;
                for (int j=1; j<=i; j++)
                {  
                    tmp1 = tmp1 + Mmat[i-1][j-1]*mu_xi.get(m,j);  
                    tmp2 = tmp2 + Mmat[i-1][j-1]*mu_eta.get(m,j);
                }

                phi_xi.set(m,i,  tmp1 );
                phi_eta.set(m,i, tmp2 );
            }
        }

        // -------------------------------------------------------------
        // Loop over every grid cell indexed by user supplied parameters
        // described by istart...iend
        // -------------------------------------------------------------
#pragma omp parallel for
        for (int i=istart; i<=iend; i++)
        {	  
            // Find center of current cell
            const int i1 = Mesh.get_tnode(i,1);
            const int i2 = Mesh.get_tnode(i,2);
            const int i3 = Mesh.get_tnode(i,3);
            const double x1 = Mesh.get_node(i1,1);
            const double y1 = Mesh.get_node(i1,2);
            const double x2 = Mesh.get_node(i2,1);
            const double y2 = Mesh.get_node(i2,2);
            const double x3 = Mesh.get_node(i3,1);
            const double y3 = Mesh.get_node(i3,2);

            const double xc = (x1+x2+x3)/3.0;
            const double yc = (y1+y2+y3)/3.0;

            // Compute q, aux and fvals at each Gaussian Quadrature point
            // for this current cell indexed by (i,j)
            // Save results into dTensor2 qvals, auxvals and fvals.
            for (int m=1; m<=mpoints; m++)
            {
                // convert phi_xi and phi_eta derivatives
                // to phi_x and phi_y derivatives through Jacobian
                for (int k=1; k<=kmax_fout; k++)
                {
                    phi_x.set(m,k, Mesh.get_jmat(i,1,1)*phi_xi.get(m,k)
                            + Mesh.get_jmat(i,1,2)*phi_eta.get(m,k) );
                    phi_y.set(m,k, Mesh.get_jmat(i,2,1)*phi_xi.get(m,k)
                            + Mesh.get_jmat(i,2,2)*phi_eta.get(m,k) );
                }

                // point on the unit triangle
                const double s = spts.get(m,1);
                const double t = spts.get(m,2);

                // point on the physical triangle
                xpts.set(m,1, xc + (x2-x1)*s + (x3-x1)*t );
                xpts.set(m,2, yc + (y2-y1)*s + (y3-y1)*t );

                // Solution values (q) at each grid point
                for (int me=1; me<=meqn; me++)
                {
                    qvals.set(m,me, 0.0 );

                    for (int k=1; k<=kmax_qin; k++)
                    {
                        qvals.set(m,me, qvals.get(m,me) 
                                + phi.get(m,k) * qin->get(i,me,k) );
                    }
                }

                // Auxiliary values (aux) at each grid point
                for (int ma=1; ma<=maux; ma++)
                {
                    auxvals.set(m,ma, 0.0 );

                    for (int k=1; k<=kmax_auxin; k++)
                    {
                        auxvals.set(m,ma, auxvals.get(m,ma) 
                                + phi.get(m,k) * auxin->get(i,ma,k) );
                    }
                } 
            }

            // Call user-supplied function to set fvals
            Func(vel_vec, xpts, qvals, auxvals, fvals);

            // Evaluate integral on current cell (project onto Legendre basis) 
            // using Gaussian Quadrature for the integration
            for (int m1=1; m1<=mcomps_out; m1++)		
            for (int m2=1; m2<=kmax_fout; m2++)
            {
                double tmp = 0.0;
                for (int k=1; k<=mpoints; k++)
                {
                    tmp = tmp + wgts.get(k)*
                        ( fvals.get(k,m1,1)*phi_x.get(k,m2) +
                          fvals.get(k,m1,2)*phi_y.get(k,m2) );
                }
                fout->set(i, m1, m2,  2.0*tmp );
            }

        }
    }
}
 Result operator()(Param0 p0, Param1 p1) const {
     return Func(p0, p1, 0, 0);
 }
Example #17
0
int main()
{
    srand((unsigned)time(NULL));

    int i, j, k, l, varw, varc1, varc2, vfun=3, vtest, vgen; // iteration vars
    float w, c1, c2, edge, Vmax, goal, gb, res = 0, avggennew=0;  // gb is the global gbest
    float vel[coornum], pbest[coornum], gbest[coornum], results[4*testnum]; // Each bird's got their own gbest
    double absRadius[N],paramK[N]; // Absolute perceptive radius and the radius parameter matrix K
    double relRadius; // A iteration var for radius
    int radRec; // A var to count the index of the radius
    int adjmat[N][N]; // Adjacent Matrix

    char buffer[19]; // A buffer to write the file, 15 is the estimated char numbers
    char storage[19*relRange];


    /* Storage Section */
//The strategy is: we store the 'sum' into 'aves'.
//When the time comes they got loaded into the file, we'll have them become real 'average'

    float AveOptGen[relRange];  // FuncNumber*RadiusNumber: Every 19[radius] with a func
    float AveOptRate[relRange];  // FuncNumber*RadiusNumber: Every 19[radius] with a func
    float AveOptFit[relRange][gennum/aveDegInterval+1]; // The average of the gbest fitness of the interval generations
    float AveEndFit[relRange];// The average of the gbest fitness in the end of each successful test (last generation)
    /* End of Storage Section */


    for(i=0; i<relRange; i++)
    {
        AveOptGen[i]=0;
        AveOptRate[i]=0;
        AveEndFit[i]=0;
        for(j=0; j<gennum/aveDegInterval; j++)
        {
  //          AveDeg[i][j]=0;
            AveOptFit[i][j]=0;
        }

    }

    for(i=0; i<19*relRange; i++)
    {
        storage[i]=' ';
    }


    radRec=0; // Set the radius index counting number

    for(relRadius=0.2; relRadius<1.01; relRadius+=0.05) // Loop layer 1 (relRadius)
    {

        w = 0.6;
        for(varw = 0; varw < 1; varw++)
        {
            c1 = 1.7;
            for(varc1 = 0; varc1 < 1; varc1++)
            {
                c2 = 1.7;
                for(varc2 = 0; varc2 < 1 ; varc2++)
                {


                    edge = 5.12;
                    Vmax = edge;
                    goal = 100;

                    int ngoal = 0, avggen = 0; // Goal achieving flag & Average generations

                    for(i = 0; i < testnum; i++)
                    {
                        results[4*i] = gennum;
                        results[4*i+1] = 0;
                        results[4*i+2] = gennum;
                        results[4*i+3] = 0;
                    }


                    for(vtest = 0; vtest < testnum; vtest++)  // Run the experiment
                    {
                        double neoDiag=0;
                        double dist=0;
                        int sum = 1;


                        for(i = 0; i < coornum; i++)
                        {
                            pbest[i] = INT_MAX;
                            gbest[i] = INT_MAX;
                        }

                        //Initialization:

                        for(i = 0; i < dim + 1; i++)
                        {
                            for(j = 0; j < N; j++)
                            {
                                if(i < dim)
                                {
                                    coor[(dim+1)*j+i] = (double)rand() / RAND_MAX *  2 * edge - edge;
                                    vel[(dim+1)*j+i] = (double)rand() / RAND_MAX * 2 * Vmax - Vmax;
                                    pbest[(dim+1)*j+i] = coor[(dim+1)*j+i];
                                    gbest[(dim+1)*j+i] = coor[(dim+1)*j+i];

                                }
                                else
                                {
                                    // i=dim

                                    Func(j);
                                    // Initializing pbest
                                    pbest[(dim+1)*j+i] = coor[(dim+1)*j+i];
                                    gbest[(dim+1)*j+i] = coor[(dim+1)*j+i];

                                } // End of the condition i = dim
                            } // for birds



                        } // for dims


                        absRadius[0] = relRadius * sqrt(dim * pow(2 * edge , 2));
                        for(j=0;j<N;j++){
                            paramK[j]=relRadius;
                            absRadius[j]=absRadius[0];
                        }


                        for(j=0; j<N; j++)
                            for(k=0; k<N; k++) // Avoid Relapse
                            {
                                dist=getDistance(j,k);
                                if( dist <= absRadius[j] && j!=k ) // k Can be perceived by j
                                {
                                    adjmat[j][k]=1;
                                }
                                else
                                {
                                    adjmat[j][k]=0;
                                }


                            }
                        // End of producing the initiating Adjacent Matrix


                        // Updating each bird's gbest:
                        for(j=0; j<N; j++)
                        {
                            for(k=0; k<N; k++)
                                if( adjmat[j][k] != 0 ) // k Can be perceived by j
                                {
                                    // Updating the gbest of j
                                    //printf("%f\t",getDistance(j,k));
                                    if( coor[(dim+1)*k+dim] < gbest[(dim+1)*j+dim] )
                                    {
                                        for(l=0; l<=dim; l++)
                                            gbest[(dim+1)*j+l] = coor[(dim+1)*k+l];
                                    }
                                }
                            //printf("gbest of %d:%f\nfitness of %d:%f\n",j,gbest[(dim+1)*j+dim],j,coor[(dim+1)*j+dim]);
                        }

                        gb = gbest[dim]; // Updating the global gbest
                        for(i = 1; i < N; i++)
                            if(gbest[(dim+1)*i+dim] < gb)
                                gb = gbest[(dim+1)*i+dim];
                        AveOptFit[radRec][0]+=gb;

                        // End of Updating each bird's gbest in initialization


                        for(vgen = 0; vgen < gennum; vgen++)         // Evolution starts
                        {

                            for(i = 0; i < dim + 1; i++)
                            {
                                for(j = 0; j < N; j++)
                                {
                                    if(i < dim)
                                    {
                                        float r1 = (double)rand() / RAND_MAX * 1;
                                        float r2 = (double)rand() / RAND_MAX * 1;
                                        vel[(dim+1)*j+i] = w * vel[(dim+1)*j+i] + c1 * r1 * (pbest[(dim+1)*j+i] - coor[(dim+1)*j+i])\
                                                           + c2 * r2 * (gbest[(dim+1)*j+i] - coor[(dim+1)*j+i]);

                                        coor[(dim+1)*j+i] += vel[(dim+1)*j+i];

                                    }
                                    else  // i = dim
                                    {

                                        Func(j);
                                        // When i = dim, updating pbest:
                                        if(coor[(dim+1)*j+i] < pbest[(dim+1)*j+i])
                                            for(l = 0; l < dim + 1; l++)
                                                pbest[(dim+1)*j+l] = coor[(dim+1)*j+l];

                                        // Comparing itself with gbest:
                                        if(coor[(dim+1)*j+i] < gbest[(dim+1)*j+i])
                                            for(l = 0; l < dim + 1; l++)
                                                gbest[(dim+1)*j+l] = coor[(dim+1)*j+l];


                                    } // End of else
                                } // for birds
                            } // for dims

                            if( (vgen+1) % (changeInte) == 0 && vgen!=0)
                            {
                                double fit[2][N];
                                for(j=0;j<N;j++){
                                     fit[0][j]=coor[(dim+1)*j+dim];  // Fitness
                                     fit[1][j]=j;  // The index of particle
                                }
                                QuickSort(fit,0,N-1);  // Done sorting the fitness while keeping the index
                                // Changing the parameter k
                                // The quicksort gives a small to large sequence!
                                for(j=0;j<N;j++){
                                    if(j>=35){
                                        paramK[(int)fit[1][j]]-=kstep;
                                        if( paramK[(int)fit[1][j]] < kLowerLim)
                                             paramK[(int)fit[1][j]] = kLowerLim;
                                    }
                                    if(j<15){
                                        paramK[(int)fit[1][j]]+=kstep;
                                    }
                                    absRadius[(int)fit[1][j]]=paramK[(int)fit[1][j]]*neoDiag;
                                    //printf("%d,",(int)fit[1][j]);
                                }
                                //printf("\n");
                                //printf("%d,%f\n",vgen,neoDiag);
                            }

                            neoDiag=0;

                            // Producing the initiating Adjacent Matrix
                            for( j=0; j<N ; j++ )
                                for( k=0; k<N; k++) // Avoid Relapse
                                {
                                    dist=getDistance(j,k);
                                    if( dist <= absRadius[j] && j!=k ) // k Can be perceived by j
                                    {
                                        adjmat[j][k]=1;
                                    }
                                    else
                                    {
                                        adjmat[j][k]=0;
                                    }

                                    if( (vgen+1) % changeInte == (changeInte-1) )
                                        if(dist>neoDiag)
                                        {
                                            neoDiag=dist;
                                            //printf("%d,%d,dist:%f\t",j,k,dist);
                                        }

                                }
                            //if(neoDiag!=0)
                            //printf("%d,%f\n",vgen,neoDiag);
                            // End of producing the initiating Adjacent Matrix

                          /*  //Caculating Average Degree of the generation
                            if( (vgen+1) % aveDegInterval == 0 )
                            {
                                for( j=0; j<N ; j++ )
                                    for( k=0; k<N ; k++ )
                                        if( adjmat[j][k] != 0) // k Can be perceived by j
                                            aveDegree+=1;
                                aveDegree/=N; // Got it
                                AveDeg[radRec][(vgen+1) / aveDegInterval] += aveDegree; // Storing Average Degree of this particular generation
                            }
                        */


                            // Updating each bird's gbest:
                            for( j=0; j<N ; j++ )
                            {
                                for( k=0; k<N ; k++ )
                                    if( adjmat[j][k] != 0 ) // k Can be perceived by j
                                        // Updating the gbest of j
                                        if( coor[(dim+1)*k+dim] < gbest[(dim+1)*j+dim] )
                                            for(l=0; l<=dim; l++)
                                                gbest[(dim+1)*j+l] = coor[(dim+1)*k+l];
                                //printf("gbest of %d:%f\nfitness of %d:%f\n",j,gbest[(dim+1)*j+dim],j,coor[(dim+1)*j+dim]);
                            }
                            // End of Updating each bird's gbest

                            gb = gbest[dim]; // Updating the global gbest
                            for(i = 1; i < N; i++)
                                if(gbest[(dim+1)*i+dim] < gb)
                                    gb = gbest[(dim+1)*i+dim];

                            if( (vgen+1) % aveDegInterval == 0 )
                            {
                                AveOptFit[radRec][(vgen+1) / aveDegInterval]+=gb;
                            }

                            if(gb < goal && sum != 0)
                            {
                                results[4*vtest] = (double)vgen+1;
                                results[4*vtest+1] = gb;
                                sum = 0;
                                printf("\ngb:%f,%d\t",gb,vgen);
                                //ngoal++;
                                //break;
                            }
                            if(vgen == gennum - 1)
                            {
                                results[4*vtest+2] = gennum;
                                results[4*vtest+3] = gb;
                                printf("lastgb:%f\n",gb);
                            }


                        } // for vgens


                        printf("\nTest%d for Function%d of relRadius%f is done. The next one's coming at ya.\n\n",vtest,vfun,relRadius);

                    } // for vtest

                    for(i = 0; i < testnum; i++)
                    {
                        if(results[4*i] != gennum)
                        {
                            ngoal++;
                            avggen += results[4*i];
                            res += results[4*i+1];
                            AveEndFit[radRec]+=results[4*i+3];
                        }
                    }
                    printf("%d,%d", avggen, ngoal);
                    if(ngoal == 0)
                    {
                        AveEndFit[radRec]=-1;
                        avggennew = (double)gennum;
                    }
                    else
                    {
                        AveEndFit[radRec] /= ngoal;
                        avggennew = (double)avggen / ngoal;
                    }


                    printf("AVGEN:%f\t",avggennew);
                    AveOptGen[radRec]=avggennew;
                    printf("AVRATE:%f",(double)ngoal / testnum * 100);
                    AveOptRate[radRec]=(double)ngoal / testnum * 100;

                    printf("Function%d is tested under this radius.\n", vfun);

                    c2 += 0.1;
                }
                c1 += 0.1;
            }
            w += 0.1;
        }
//} // End of Loop layer 2 (population)

        radRec++;

        printf("\n\nRadius %d is tested\n\n",radRec);

    } // End of Loop layer 1 (relRadius)
    printf("\n\n Done! You got it, dude!");

    for(i=0; i<relRange; i++)
        for(j=0; j<=(gennum/aveDegInterval); j++)
        {
            AveOptFit[i][j]=(double)AveOptFit[i][j]/(testnum);
        }

// Get da data in da file!
    sprintf(storage,"Gen,");
    for(i=0; i<relRange; i++)
    {
        sprintf(buffer,"ItemRel%f,",0.2+i*0.05);
        strcat(storage,buffer);
    }


    pso = fopen("c:/pso/dynaRadKSort1.5/100/vicpsoFunc3-main.txt", "w");
    fprintf(pso, "RelRadius,AveOptGen,AveOptRate\n");
    for(i=0; i<relRange; i++)
    {
        fprintf(pso, "%f,%f,%f\n",0.2+i*0.05,AveOptGen[i],AveOptRate[i]);
    }
    fclose(pso);


    pso = fopen("c:/pso/dynaRadKSort1.5/100/vicpsoFunc3-OptFit.txt", "w");
    fprintf(pso, "%s\n",storage );

    for(j=0; j<=(gennum/aveDegInterval); j++)
    {
        int inIte;
        fprintf(pso,"%d,",j*10);
        for(inIte=0; inIte<relRange; inIte++)
        {
            fprintf(pso, "%f,",AveOptFit[inIte][j]);
        }
        fprintf(pso, "\n");
    }
    fclose(pso);

    pso = fopen("c:/pso/dynaRadKSort1.5/100/vicpsoFunc3-EndSucFit.txt","w");
    for(i=0; i<relRange;i++){
        fprintf(pso,"%f,%f,\n",0.2+i*0.05,AveEndFit[i]);
    }
    fclose(pso);

    return 0;

} // End of main
 Result operator()(Param0 p0, Param1 p1, const Arg& a0) const {
     const Arg* const args[] = { &a0 };
     return Func(p0, p1, args, 1);
 }
Example #19
0
 GLM_FUNC_QUALIFIER static tvec1<R, P> call(R (*Func) (T x), tvec1<T, P> const & v)
 {
     return tvec1<R, P>(Func(v.x));
 }
 Result operator()(Param0 p0, Param1 p1, const Arg& a0, const Arg& a1,
                   const Arg& a2) const {
     const Arg* const args[] = { &a0, &a1, &a2 };
     return Func(p0, p1, args, 3);
 }
Example #21
0
 GLM_FUNC_QUALIFIER static tvec2<T, P> call(T (*Func) (T x, T y), tvec2<T, P> const & a, tvec2<T, P> const & b)
 {
     return tvec2<T, P>(Func(a.x, b.x), Func(a.y, b.y));
 }
 Result operator()(Param0 p0, Param1 p1, const Arg& a0, const Arg& a1,
                   const Arg& a2, const Arg& a3, const Arg& a4, const Arg& a5) const {
     const Arg* const args[] = { &a0, &a1, &a2, &a3, &a4, &a5 };
     return Func(p0, p1, args, 6);
 }
Example #23
0
void GroundProgramBuilder::add()
{
	switch(stack_->type)
	{
		case LIT:
		{
			stack_->lits.push_back(Lit::create(stack_->type, stack_->vals.size() - stack_->n - 1, stack_->n));
			break;
		}
		case TERM:
		{
			if(stack_->n > 0)
			{
				ValVec vals;
				std::copy(stack_->vals.end() - stack_->n, stack_->vals.end(), std::back_inserter(vals));
				stack_->vals.resize(stack_->vals.size() - stack_->n);
				uint32_t name = stack_->vals.back().index;
				stack_->vals.back()  = Val::func(storage()->index(Func(storage(), name, vals)));
			}
			break;
		}
		case AGGR_SUM:
		case AGGR_COUNT:
		case AGGR_AVG:
		case AGGR_MIN:
		case AGGR_MAX:
		case AGGR_EVEN:
		case AGGR_EVEN_SET:
		case AGGR_ODD:
		case AGGR_ODD_SET:
		case AGGR_DISJUNCTION:
		{
			assert(stack_->type != AGGR_DISJUNCTION || stack_->n > 0);
			std::copy(stack_->lits.end() - stack_->n, stack_->lits.end(), std::back_inserter(stack_->aggrLits));
			stack_->lits.resize(stack_->lits.size() - stack_->n);
			stack_->lits.push_back(Lit::create(stack_->type, stack_->n ? stack_->aggrLits.size() - stack_->n : stack_->vals.size() - 2, stack_->n));
			break;
		}
		case STM_RULE:
		case STM_CONSTRAINT:
		{
			Rule::Printer *printer = output_->printer<Rule::Printer>();
			printer->begin();
			if(stack_->type == STM_RULE)             { printLit(printer, stack_->lits.size() - stack_->n - 1, true); }
			printer->endHead();
			for(uint32_t i = stack_->n; i >= 1; i--) { printLit(printer, stack_->lits.size() - i, false); }
			printer->end();
			pop(stack_->n + (stack_->type == STM_RULE));
			break;
		}
		case STM_SHOW:
		case STM_HIDE:
		{
			Display::Printer *printer = output_->printer<Display::Printer>();
			printLit(printer, stack_->lits.size() - 1, stack_->type == STM_SHOW);
			pop(1);
			break;
		}
		case STM_EXTERNAL:
		{
			External::Printer *printer = output_->printer<External::Printer>();
			printLit(printer, stack_->lits.size() - 1, true);
			pop(1);
			break;
		}
		#pragma message "reimplement this"
		/*
		case STM_MINIMIZE:
		case STM_MAXIMIZE:
		case STM_MINIMIZE_SET:
		case STM_MAXIMIZE_SET:
		{
			Optimize::Printer *printer = output_->printer<Optimize::Printer>();
			bool maximize = (stack_->type == STM_MAXIMIZE || stack_->type == STM_MAXIMIZE_SET);
			bool set = (stack_->type == STM_MINIMIZE_SET || stack_->type == STM_MAXIMIZE_SET);
			printer->begin(maximize, set);
			for(uint32_t i = stack_->n; i >= 1; i--)
			{

				Lit &a     = stack_->lits[stack_->lits.size() - i];
				Val prio   = stack_->vals[a.offset + a.n + 2];
				Val weight = stack_->vals[a.offset + a.n + 1];
				printer->print(predLitRep(a), weight.num, prio.num);
			}
			printer->end();
			pop(stack_->n);
			break;
		}
		*/
		case STM_COMPUTE:
		{
			Compute::Printer *printer = output_->printer<Compute::Printer>();
			for(uint32_t i = stack_->n; i >= 1; i--)
			{
				Lit &a = stack_->lits[stack_->lits.size() - i];
				printer->print(predLitRep(a));
			}
			pop(stack_->n);
			break;
		}
#pragma message "reimplement me!"
		//case META_SHOW:
		//case META_HIDE:
//		case META_EXTERNAL:
//		{
//			Val num = stack_->vals.back();
//			stack_->vals.pop_back();
//			Val id  = stack_->vals.back();
//			stack_->vals.pop_back();
//			assert(id.type == Val::ID);
//			assert(num.type == Val::NUM);
//			storage()->newDomain(id.index, num.num);
//			if(stack_->type == META_EXTERNAL) { output_->external(id.index, num.num); }
//			//else { output_->show(id.index, num.num, stack_->type == META_SHOW); }
//			break;
//		}
#pragma message "reimplement me!"
		//case META_GLOBALSHOW:
		case META_GLOBALHIDE:
		{
			output_->hideAll();
			break;
		}
		default: {
			doAdd();
		}
	}
}
 Result operator()(Param0 p0, Param1 p1, const Arg& a0, const Arg& a1,
                   const Arg& a2, const Arg& a3, const Arg& a4, const Arg& a5,
                   const Arg& a6, const Arg& a7, const Arg& a8) const {
     const Arg* const args[] = { &a0, &a1, &a2, &a3, &a4, &a5, &a6, &a7, &a8 };
     return Func(p0, p1, args, 9);
 }
 void operator() () const {
     *m_pRes = Func(m_Num);
 } 
Example #26
0
 ~AutoClose()
 {
     Func( Value );
 }
Example #27
0
		double* include(){
			matrix[0][0] = 0; matrix[0][1] = 0; matrix[0][2] = Func(ModelingTime::getTime() + ModelingTime::getStep());
			matrix[1][0] = 0; matrix[1][1] = 0; matrix[1][2] = -Func(ModelingTime::getTime() + ModelingTime::getStep());
			return &matrix[0][0];
		}
Example #28
0
NNT Lexer::NextWord() {
  // Match [a-zA-Z_][a-zA-Z0-9_]*
  // We have already matched the first character

  auto starting_offset = cursor.offset;

  do {
    IncrementCursor();
  } while (IsAlphaNumericOrUnderscore(*cursor));

  char old_char     = *cursor;
  *cursor           = '\0';
  std::string token = cursor.line.ptr + starting_offset;
  *cursor           = old_char;

  // Check if the word is a type primitive/literal and if so, build the
  // appropriate Node.
  for (const auto &type_lit : PrimitiveTypes) {
    if (type_lit.first == token) {
      RETURN_TERMINAL(Type, Type_, IR::Value::Type(type_lit.second));
    }
  }

  if (token == "true" || token == "false") {
    RETURN_TERMINAL(True, Bool, IR::Value::Bool(token == "true"));

  } else if (token == "null") {
    RETURN_TERMINAL(Null, NullPtr, IR::Value::None());

  } else if (token == "ord") {
    RETURN_TERMINAL(Ord, Func(Char, Uint), IR::Value::None());

  } else if (token == "ascii") {
    RETURN_TERMINAL(ASCII, Func(Uint, Char), IR::Value::None());

  } else if (token == "else") {
    auto term_ptr           = new AST::Terminal;
    Cursor loc              = cursor;
    loc.offset              = starting_offset;
    term_ptr->loc           = loc;
    term_ptr->terminal_type = Language::Terminal::Else;
    term_ptr->type          = Bool;

    return NNT(term_ptr, Language::kw_else);

  }

#define CASE_RETURN_NNT(str, op, len)                                          \
  if (strcmp(token_cstr, str) == 0) { RETURN_NNT(str, op, len); }

  auto token_cstr = token.c_str();

  CASE_RETURN_NNT("in",       op_b,          2)
  CASE_RETURN_NNT("print",    op_l,          5)
  CASE_RETURN_NNT("import",   op_l,          6)
  CASE_RETURN_NNT("free",     op_l,          4)
  CASE_RETURN_NNT("while",    kw_expr_block, 5)
  CASE_RETURN_NNT("for",      kw_expr_block, 3)
  CASE_RETURN_NNT("if",       kw_if,         2)
  CASE_RETURN_NNT("case",     kw_block,      4)
  CASE_RETURN_NNT("enum",     kw_block,      4)
  CASE_RETURN_NNT("struct",   kw_struct,     6)
  CASE_RETURN_NNT("return",   op_lt,         6)
  CASE_RETURN_NNT("continue", op_lt,         8)
  CASE_RETURN_NNT("break",    op_lt,         5)
  CASE_RETURN_NNT("repeat",   op_lt,         6)
  CASE_RETURN_NNT("restart",  op_lt,         7)

#undef CASE_RETURN_NNT

  Cursor loc = cursor;
  loc.offset = starting_offset;
  return NNT(new AST::Identifier(loc, token), Language::expr);
}
 T get() const
 {
     return Func(Min_, Max_, State_);
 }
Example #30
0
inline auto unpackAndApply() {
    return Func()();
}