linkedList* variableOrdering(graph *g,int choice){ item *currItem; linkedList *orderedList; vertex *v; int i; breakCycles(g); resetWeights(g); computeWeights(g); genericSuccessorsOrdering(g, choice); orderByWeights(g->vertices); resetVisited(g); orderedList= newLinkedList(); currItem = (g-> vertices)->head; while (currItem!= NULL) { if ((currItem->vert)->visited == 0) visit(currItem->vert,orderedList); currItem = currItem->next; } return orderedList; }
void FWSingle::FWOneStep() { //create an ordered version of the ParentIDs to make the weight calculation faster vector<vector<long> > orderedPIDs=(PIDs); vector<vector<long> >::iterator it(orderedPIDs.begin()); do { std::sort((*it).begin(),(*it).end()); it++; } while(it<orderedPIDs.end()); if (verbose>2) app_log()<<" Done Sorting IDs"<<endl; resetWeights(); vector<vector<long> >::iterator stepIDIterator(IDs.begin()); vector<vector<long> >::iterator stepPIDIterator(orderedPIDs.begin() + gensTransferred); vector<vector<int> >::iterator stepWeightsIterator(Weights.begin()); //we start comparing the next generations ParentIDs with the current generations IDs int i=0; do { if (verbose>2) app_log()<<" calculating weights for gen:"<<gensTransferred<<" step:"<<i<<"/"<<orderedPIDs.size()<<endl; // if (verbose>2) app_log()<<"Nsamples ="<<(*stepWeightsIteratoetWeights).size()<<endl; vector<long>::iterator IDit( (*stepIDIterator).begin() ); vector<long>::iterator PIDit( (*stepPIDIterator).begin() ); vector<int>::iterator Wit( (*stepWeightsIterator).begin() ); if (verbose>2) app_log()<<"ID size:"<<(*stepIDIterator).size()<<" PID size:"<<(*stepPIDIterator).size()<<" Weight size:"<<(*stepWeightsIterator).size()<<endl; do { if ((*PIDit)==(*IDit)) { (*Wit)++; PIDit++; } else { IDit++; Wit++; if (IDit==(*stepIDIterator).end()) { IDit=(*stepIDIterator).begin(); Wit=(*stepWeightsIterator).begin(); } } } while(PIDit<(*stepPIDIterator).end()); // if (verbose>2) { printIDs((*stepIDIterator));printIDs((*stepPIDIterator));} // if (verbose>2) printInts((*stepWeightsIterator)); stepIDIterator++; stepPIDIterator++; stepWeightsIterator++; i++; } while(stepPIDIterator<orderedPIDs.end()); }
int main (int argc, char* argv[]) { if (argc == 1) { srand(time(NULL)); struct neural_network *network = createNetwork(3, 3, 2); int loopCount = 0, count = 1, proceed = 0; double out00, out01, out10, out11; do { do { loopCount++; setInput(1,1, network); out11 = getOutput(network); learn(network, 0); setInput(0,0, network); out00 = getOutput(network); learn(network, 0); setInput(0,1,network); out01 = getOutput(network); learn(network, 1); setInput(1,0, network); out10 = getOutput(network); learn(network, 1); printf("0xor0: %f 0xor1: %f 1xor0: %f 1xor1: %f\n",out00, out01, out10, out11); }while ((out00 > 0.05 || out01 < 0.95 || out10 < 0.95 || out11 > 0.05) && loopCount < 200000); proceed = loopCount == 200000; if(proceed) { printf("creating new network\n"); resetWeights(network); printf("weights reset"); count++; loopCount = 0; } }while(proceed); freeNetwork(network); printf("Network freed.\n"); printf("Loop count : %i\n",(count - 1)*200000 + loopCount); printf("Everything went fine. Exiting...\n"); _Exit(0); } else if (argc == 2) { IplImage *img = load(argv[1]); if(img != NULL) { const char* window_title = "Perfect Image"; cvNamedWindow (window_title, CV_WINDOW_AUTOSIZE); cvShowImage (window_title, img); cvWaitKey(0); char path[] = "result.bmp"; cvSaveImage(&path[0], img, NULL); cvDestroyAllWindows(); cvReleaseImage(&img); printf("Everything went fine. Exiting...\n"); return 0; } else { printf("Error loading image.\n"); return -1; } } else { printf("Argument issue. Exiting...\n"); return -1; } }