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