Main Page   Namespace List   Class Hierarchy   Alphabetical List   Compound List   File List   Compound Members   File Members  

main.cpp

Go to the documentation of this file.
00001 // main.cpp : Defines the entry point for the console application.
00002 //
00003 
00004 #ifdef _WINDOWS
00005 //#include "stdafx.h"
00006 //#include <crtdbg.h>
00007 #endif
00008 
00009 // debugging only
00010 //#define _CRT_DEBUG_MAP_ALLOC
00011 #include <stdlib.h>
00012 //#include <crtdbg.h>
00013 
00014 #include <time.h>
00015 #include <fstream>
00016 #include <iostream>
00017 #include <string.h>
00018 //#include "PC12EGFNGFMinimizableDirector.h"
00019 //#include "PC12RapMinusMinimizableDirector.h"
00020 //#include "OneGeneInhibitoryNetworkMinimizableDirector.h"
00021 //#include "AlternateOneGeneInhibitoryNetworkMinimizableDirector.h"
00022 #include "ZeroTAnnealMinimizer.h"
00023 #include "PositiveDefiniteLevenbergMarquardtMinimizer.h"
00024 #include "ParameterReader.h"
00025 #include "GnuPlotterSimulatedAnnealingObserver.h"
00026 #include "LogParameterFilter.h"
00027 #include "SquareRootParameterFilter.h"
00028 #include "IdentityParameterFilter.h"
00029 #include "MixedReactionNetwork.h"
00030 //#include "OneGeneInhibitoryAveragingDirector.h"
00031 #include "BasicQuenchMinimizer.h"
00032 #include "RobustLevenbergMarquardtMinimizer.h"
00033 #include "ImprovedLevenbergMarquardtMinimizer.h"
00034 #include "ScaleInvariantMarquardtMinimizer.h"
00035 #include "VariableStepsizeAnnealMinimizer.h"
00036 #include "ConjugateGradientMinimizer.h"
00037 #include "ConjugateGradientObserver.h"
00038 //#include "PC12EGFNGFRunDirector.h"
00039 //#include "PC12AlternateMinimizableDirector.h"
00040 #include "ParameterRandomizer.h"
00041 #include "ExampleNetworkMinimizableDirector.h"
00042 #include "StochasticSensitivityAnalysis.h"
00043 #include "GnuPlotterCostObserver.h"
00044 #include "GnuPlotterParameterScatterPlot.h"
00045 #include "GnuPlotterResidualScatterPlot.h"
00046 #include "CommaStrategyOne.h"
00047 #include "ClonalCommaES.h"
00048 //#include "OneGeneEnsembleRunDirector.h"
00049 //#include "OneGeneEnsembleDirector.h"
00050 //#include "PC12EGFNGFEnsembleDirector.h"
00051 //#include "PC12AlternateEnsembleDirector.h"
00052 //#include "PC12RapMinusEnsembleDirector.h"
00053 //#include "CoupledOneGeneNetworksMinimizableDirector.h"
00054 //#include "CoupledPC12NetworksMinimizableDirector.h"
00055 //#include "EGFRTraffickingCoupledMinimizableDirector.h"
00056 //#include "EGFRTraffickingIdealCellMinimizableDirector.h"
00057 //#include "EGFRTraffickingRunDirector.h"
00058 //#include "EGFRTraffickingEnsembleDirector.h"
00059 #include "LowDimensionalCostFunctionMapper.h"
00060 //#include "PC12ParameterTranslator.h"
00061 #include "AcceptanceRatioFreeEnergyEstimator.h"
00062 //#include "LaubLoomisDictyNetworkMinimizableDirector.h"
00063 //#include "LaubLoomisDictyNetworkEnsembleDirector.h"
00064 //#include "MartielGoldbeterDictyNetworkMinimizableDirector.h"
00065 #include "ForcesObserver.h"
00066 //#include "OneGeneInhibitoryNetworkRunDirector.h"
00067 //#include "CombinatorialNetworksSloppyMinimizableDirector.h"
00068 #include "LeastSquaresObserver.h"
00069 #include "PeriodicQuenchMinimizer.h"
00070 #include "NelderMeadSimplexMinimizer.h"
00071 
00072 #include "TranslationModelMinimizable.h"
00073 #include "LocateInputFileDirectory.h"
00074 
00075 main(int argc, char* argv[])
00076 {
00077  int i; 
00078         // MICROSOFT DEBUGGING STUFF
00079         //_crtBreakAlloc = 55;  // Breaks at memory allocation failure no. ?
00080         // global variable
00081         //_CrtSetBreakAlloc(22584);
00082 
00083         //int tmpFlag = _CRTDBG_REPORT_FLAG;
00084         //tmpFlag |= _CRTDBG_DELAY_FREE_MEM_DF;
00085         //tmpFlag |= _CRTDBG_ALLOC_MEM_DF; // use any checking at all.
00086         //tmpFlag |= _CRTDBG_LEAK_CHECK_DF; // at end of program.
00087         //tmpFlag |= _CRTDBG_CHECK_ALWAYS_DF; // end of program
00088         //tmpFlag &= ~_CRTDBG_DELAY_FREE_MEM_DF; // turn it off
00089 
00090         //_CrtSetDbgFlag(_CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF | _CRTDBG_CHECK_ALWAYS_DF);
00091         //_CrtMemState s1,s2,s3;
00092         //_CrtMemCheckpoint( &s1 );
00093 
00094         //ReactionNetwork *rN = new CEGFRTraffickingNetwork();
00095         //rN->DumpPetriNetDotFile("PetriPC12.dot");
00096         //rN->DumpTeXForm("traffic.tex");
00097         //delete rN;
00098         
00099 
00100         
00101         //CRunDirector *rD = new COneGeneInhibitoryNetworkRunDirector();
00102         //CRunDirector *rD = new COneGeneInhibitoryAveragingDirector();
00103         //CRunDirector *rD = new CPC12EGFNGFRunDirector();
00104         //CRunDirector *rD = new CEGFRTraffickingRunDirector();
00105         //CEnsembleCombinationDirector *rD = new COneGeneEnsembleDirector(500);
00106         //CEnsembleCombinationDirector *rD = new CPC12EGFNGFEnsembleDirector(704);
00107         //CEnsembleCombinationDirector *rD = new CPC12AlternateEnsembleDirector(50);
00108         //CEnsembleCombinationDirector *rD = new CLaubLoomisDictyNetworkEnsembleDirector(60);
00109         //CEnsembleCombinationDirector *rD = new CPC12RapMinusEnsembleDirector(320);
00110         //CEnsembleCombinationDirector *rD = new CEGFRTraffickingEnsembleDirector(200);
00111 
00112         /*
00113         cin.get();
00114         rD->Execute();
00115         cin.get();
00116         delete rD;
00117         */
00118         
00119         /*
00120         NetworkMinimizableDirector *pS1 = new CPC12AlternateMinimizableDirector();
00121         NetworkMinimizableDirector *pS0 = new PC12EGFNGFMinimizableDirector();
00122         CParameterTranslator *pT = new CPC12ParameterTranslator();
00123         CAcceptanceRatioFreeEnergyEstimator *pDeltaF = new CAcceptanceRatioFreeEnergyEstimator(pS0,686,pS1,1000,pT);
00124         pDeltaF->LoadEnsemble("ensemble0.par","ensemble1.par");
00125         pDeltaF->ComputeHistograms();
00126 
00127         delete pS0;
00128         delete pS1;
00129         delete pT;
00130         delete pDeltaF;
00131         */
00132 
00133         // define an uber-minimizable
00134         //NetworkMinimizableDirector *nM = new CPC12AlternateMinimizableDirector();
00135         
00136         //NetworkMinimizableDirector *nM = new PC12EGFNGFMinimizableDirector();
00137 
00138         //NetworkMinimizableDirector *nM = new CPC12RapMinusMinimizableDirector();
00139         
00140         //NetworkMinimizableDirector *nM = new CCoupledPC12NetworksMinimizableDirector(0.01,0.0);
00141 
00142         //NetworkMinimizableDirector *nM = new COneGeneInhibitoryNetworkMinimizableDirector();
00143         
00144         //NetworkMinimizableDirector *nM = new CAlternateOneGeneInhibitoryNetworkMinimizableDirector();
00145 
00146         //NetworkMinimizableDirector *nM = new CExampleNetworkMinimizableDirector();
00147         
00148         //NetworkMinimizableDirector *nM = new CCoupledOneGeneNetworksMinimizableDirector(0.01,0.0);
00149         
00150         //NetworkMinimizableDirector *nM = new CEGFRTraffickingIdealCellMinimizableDirector();
00151 
00152         //NetworkMinimizableDirector *nM = new CEGFRTraffickingCoupledMinimizableDirector(1.0,0.0);
00153         
00154         //NetworkMinimizableDirector *nM = new CEGFRTraffickingNIH3T3MinimizableDirector();
00155 
00156         //NetworkMinimizableDirector *nM = new CEGFRTraffickingCHOMinimizableDirector();
00157  
00158         //NetworkMinimizableDirector *nM = new CLaubLoomisDictyNetworkMinimizableDirector();
00159         
00160         //NetworkMinimizableDirector *nM = new CMartielGoldbeterDictyNetworkMinimizableDirector();
00161 
00162 // Find directory for input files: assumed base directory contains folddata.dat
00163         LocateInputFileDirectory locate("folddata.dat");
00164         NLLSMinimizable *nM = new TranslationModelMinimizable(&locate, locate.Get("folddata.dat"),12);
00165 
00166         /*
00167         // read in two sets of parameters
00168         ParameterReader *pR1 = new ParameterReader("min2_cg_woPI3K.par");
00169         double *p1 = new double[nM->GetNParameters()];
00170         for(int i = 0; i < nM->GetNParameters(); i++)
00171         {
00172                 p1[i] = pR1->ReadParameter();
00173         }
00174         delete pR1;
00175         ParameterReader *pR2 = new ParameterReader("min3_cg_woPI3K.par");
00176         double *p2 = new double[nM->GetNParameters()];
00177         for(i = 0; i < nM->GetNParameters(); i++)
00178         {
00179                 p2[i] = pR2->ReadParameter();
00180         }
00181         delete pR2;
00182         ParameterReader *pR3 = new ParameterReader("min4_cg_woPI3K.par");
00183         double *p3 = new double[nM->GetNParameters()];
00184         for(i = 0; i < nM->GetNParameters(); i++)
00185         {
00186                 p3[i] = pR3->ReadParameter();
00187         }
00188         delete pR3;
00189         
00190         // create the mapper and filter
00191         CLowDimensionalCostFunctionMapper *pMap = new CLowDimensionalCostFunctionMapper();
00192         CParameterFilter *pFilter = new CLogParameterFilter();
00193         // do the mapping
00194         pMap->Map(nM,pFilter,p1,p2,p3,-1,1,-1,1,961);
00195 
00196         delete pMap;
00197         delete pFilter;
00198         delete nM;
00199         delete [] p1;
00200         delete [] p2;
00201         delete [] p3;
00202         */
00203         /*
00204         // use default parameters
00205         double *parameters = new double[nM->GetNParameters()];
00206         for(int i = 0; i < nM->GetNParameters(); i++)
00207         {
00208                 parameters[i] = nM->GetParameter(i);
00209         }
00210         */
00211         
00212         // read parameters from previous optimization pass
00213         ParameterReader *pReader = new ParameterReader(locate.Get("translation_default.par"));
00214 
00215         double *parameters = new double[nM->GetNParameters()];
00216         cout << "Total number of parameters is " << nM->GetNParameters() << endl;
00217         for(i = 0; i < nM->GetNParameters(); i++)
00218         {
00219                 parameters[i] = pReader->ReadParameter();
00220         }
00221         delete pReader;
00222         
00223         /*
00224         // randomize parameters
00225         CParameterRandomizer *pR = new CParameterRandomizer(776157);
00226         pR->Randomize(parameters,nM->GetNParameters(),0.5,1);
00227         delete pR;
00228         */
00229         
00230         //cin.get();
00231         //clock_t start,finish;
00232         //start = clock();
00233         //double cost = nM->ObjectiveFunction(parameters);
00234         //cout << "Ground state cost is " << cost << endl;
00235         //finish = clock();
00236         //for(i = 0; i < nM->GetNExperiments(); i++)
00237         //{
00238         //      cout << "Steps: " << nM->GetMover(i)->GetTotalStepsTaken() << endl;
00239         //}
00240         //cout << "Clock Duration: " << (double)(finish - start)/CLOCKS_PER_SEC;
00241         //cin.get();
00242         
00243 
00244         /*
00245         // STEPSIZE TESTER - FOR USE WITH STOCHASTIC SENSITIVITY
00246         // evaluate the objective function at the minimum to determine what size step
00247         // to give to fixed stepsize mover
00248         double cost = nM->ObjectiveFunction(parameters);
00249         cout << "Cost of parameter set is " << cost << endl;
00250         for(int nEx = 0; nEx < nM->GetNExperiments(); nEx++)
00251         {
00252                 cout << "Experiment " << nEx << ":" << endl;
00253                 cout << "\tSmallest stepsize was " << nM->GetMover(nEx)->GetMinStepSize() << endl;
00254                 cout << "\tLargest stepsize was " << nM->GetMover(nEx)->GetMaxStepSize() << endl;
00255                 cout << "\tTotal number of steps was " << nM->GetMover(nEx)->GetTotalStepsTaken() << endl;
00256         }
00257         // just a dummy so I don't have to keep commenting out delete statement at bottom
00258         Minimizer *minimizer = new CBasicQuenchMinimizer(1,10,1.0,1);
00259         */
00260         /*
00261         CParameterFilter *pFilter = new CLogParameterFilter();
00262         CStochasticSensitivityAnalysis *minimizer = new CStochasticSensitivityAnalysis(false,false,0,9801,pFilter,1.0e-6,1.0);
00263         cout << "Performing Stochastic Sensitivity Analysis" << endl;
00264         
00265         minimizer->DoAnalysis(parameters,nM);
00266         
00267         cout << "RW Variance : " << minimizer->GetRWValue() << endl;
00268         delete pFilter;
00269         */
00270         /*
00271         cout << "(mu/rho,lambda)-ES One Selected" << endl;
00272         CParameterFilter *filter = new CLogParameterFilter();
00273         Minimizer *minimizer = new CCommaStrategyOne(filter,1.0,15,2,50,100,887);
00274         double cost = minimizer->Minimize(parameters,nM);
00275         cout << "Average cost of final population " << cost << endl;
00276         delete filter;
00277         */
00278         /*
00279         cout << "(mu,lambda)-ES Selected" << endl;
00280         CParameterFilter *filter = new CLogParameterFilter();
00281         Minimizer *minimizer = new CClonalCommaES(filter,0.0,15,100,1109);
00282         double cost = minimizer->Minimize(parameters,nM);
00283         cout << "Average cost of final population " << cost << endl;
00284         delete filter;
00285         */
00286         
00287         
00288         // BE CAREFUL WITH THE ERROR TOLERANCE, PARTICULARLY IF YOU USE A LOW ORDER
00289         // INTEGRATOR
00290         /*
00291         cout << "Nelder-Mead Simplex Selected" << endl;
00292         CParameterFilter *filter = new CLogParameterFilter();
00293         Minimizer *minimizer = new CNelderMeadSimplexMinimizer(filter,1000,2.0);
00294         double cost = minimizer->Minimize(parameters,nM);
00295         cout << "Final cost of " << cost << endl;
00296         delete filter;
00297         */
00298         /*
00299         cout << "Levenberg-Marquardt Selected" << endl;
00300         CParameterFilter *filter = new CLogParameterFilter();
00301         Minimizer *minimizer = new CImprovedLevenbergMarquardtMinimizer(filter,false,1.0e-06,false,1.0e-08,true,1.0e-06,true,1.0e-06,1,1.0e-06);
00302         Observer *LSObs = new CLeastSquaresObserver();
00303         minimizer->Attach(LSObs);
00304         double cost = minimizer->Minimize(parameters,nM);
00305         cout << "Final cost of " << cost << endl;
00306         minimizer->Detach(LSObs);
00307         delete filter;
00308         delete LSObs;
00309         */
00310         
00311         /*
00312         cout << "Scale-Invariant Levenberg-Marquardt Selected" << endl;
00313         CParameterFilter *filter = new CLogParameterFilter();
00314         Minimizer *minimizer = new CScaleInvariantMarquardtMinimizer(filter,false,1.0e-2,true,1.0e-08,true,1.0e-06,true,1.0e-06,1000,1.0e-06);
00315         double cost = minimizer->Minimize(parameters,nM);
00316         cout << "Final cost of " << cost << endl;
00317         delete filter;
00318         */
00319 
00320         cout << "Conjugate Gradient Selected" << endl;
00321         CParameterFilter *filter = new CLogParameterFilter();
00322         Minimizer *minimizer = new CConjugateGradientMinimizer(false,filter,500,1.0e-06);
00323         //Observer *CGObs = new CConjugateGradientObserver();
00324         //minimizer->Attach(CGObs);
00325         double cost = minimizer->Minimize(parameters,nM);
00326         //minimizer->Detach(CGObs);
00327         //delete CGObs;
00328         delete filter;
00329         
00330         /*
00331         cout << "Basic Quench Selected" << endl;
00332         int nEquilibrationSteps = 25;
00333         double stepScale = 0.0;
00334         CParameterFilter *filter = new CLogParameterFilter();
00335         Minimizer *minimizer = new CBasicQuenchMinimizer(nEquilibrationSteps,10,stepScale,99449,filter);
00336         double cost = minimizer->Minimize(parameters,nM);
00337         */
00338         
00339         /*
00340         cout << "Variable Stepsize SA Selected" << endl;
00341         CParameterFilter *filter = new CLogParameterFilter();
00342         Minimizer *minimizer = new CVariableStepsizeAnnealMinimizer(4040440,filter,10,0.7,0.15,10);
00343         //GnuPlotter *plotter = new GnuPlotterSimulatedAnnealingObserver();
00344         //minimizer->Attach(plotter);
00345         double cost = minimizer->Minimize(parameters,nM);
00346         //minimizer->Detach(plotter);
00347         //delete plotter;
00348         delete filter;
00349         */
00350         /*
00351         cout << "Periodic Quench Selected" << endl;
00352         CParameterFilter *filter = new CLogParameterFilter();
00353         Minimizer *minimizer = new CPeriodicQuenchMinimizer(5587,filter,true,10,200,1.0e-02,10,0.5,2.0);
00354         double cost = minimizer->Minimize(parameters,nM);
00355         delete filter;
00356         */
00357         
00358         cout << "Best cost for this minimization is " << cost << endl;
00359         // write the best parameters to a file and stdout
00360         fstream *pfbest = new fstream("translation_cg.par",ios::out);
00361         *pfbest << "##################################################################" << endl;
00362         *pfbest << "# BEST PARAMETERS" << endl;
00363         *pfbest << "# COST : " << cost << endl;
00364         *pfbest << "##################################################################" << endl;
00365         for(i = 0; i < nM->GetNParameters(); i++)
00366         {
00367            *pfbest << parameters[i] << endl;
00368         }
00369         delete pfbest;
00370         
00371         
00372         delete minimizer;
00373         delete [] parameters;           
00374         delete nM;
00375         
00376         //_CrtDumpMemoryLeaks();
00377         
00378         //_CrtMemCheckpoint( &s2 );
00379         
00380         /*
00381         if ( _CrtMemDifference( &s3, &s1, &s2) ) 
00382                 _CrtMemDumpStatistics( &s3 );
00383         */
00384 
00385         return 0;
00386 }
00387 

Generated on Mon Nov 3 09:37:58 2003 by doxygen1.2.14 written by Dimitri van Heesch, © 1997-2002