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 // CCancer.cpp : Defines the entry point for the console application.
00002 //
00003 
00004 #ifdef _WINDOWS
00005 #include "StdAfx.h"
00006 #include <crtdbg.h> // For debugging functions windows only.
00007 #endif
00008 
00009 // debugging only
00010 //#define _CRT_DEBUG_MAP_ALLOC
00011 
00012 #include "QuorumMaster.h"
00013 #include "InfrastructureMaster.h"
00014 
00015 /*#include <fstream.h>
00016 #include <stdlib.h>
00017 #include <iostream.h>
00018 #include <string.h>
00019 //#include "PC12EGFNGFMinimizableDirector.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 "HessianMonteCarloQuench.h"
00032 #include "BasicQuenchMinimizer.h"
00033 #include "RobustLevenbergMarquardtMinimizer.h"
00034 #include "ImprovedLevenbergMarquardtMinimizer.h"
00035 #include "ScaleInvariantMarquardtMinimizer.h"
00036 #include "ConjugateGradientMinimizer.h"
00037 //#include "PC12EGFNGFRunDirector.h"
00038 //#include "PC12AlternateMinimizableDirector.h"
00039 #include "ParameterRandomizer.h"
00040 #include "ExampleNetworkMinimizableDirector.h"
00041 #include "StochasticSensitivityAnalysis.h"
00042 #include "GnuPlotterCostObserver.h"
00043 #include "GnuPlotterParameterScatterPlot.h"
00044 #include "GnuPlotterResidualScatterPlot.h"
00045 #include "CommaStrategyOne.h"
00046 #include "ClonalCommaES.h"
00047 //#include "OneGeneEnsembleRunDirector.h"
00048 //#include "OneGeneEnsembleDirector.h"
00049 //#include "PC12EGFNGFEnsembleDirector.h"
00050 //#include "PC12AlternateEnsembleDirector.h"
00051 //#include "CoupledOneGeneNetworksMinimizableDirector.h"
00052 //#include "CoupledPC12NetworksMinimizableDirector.h"
00053 //#include "EGFRTraffickingCoupledMinimizableDirector.h"
00054 #include "LowDimensionalCostFunctionMapper.h"
00055 #include "QuorumSensingNetworkMinimizableDirector.h"
00056 #include "QuorumSensingRunDirector.h"
00057 //#include "OneGeneInhibitoryNetworkRunDirector.h"
00058 #include "LeastSquaresObserver.h"
00059 #include "ConjugateGradientObserver.h"
00060 //#include "OneGeneStochasticNetworkMinimizableDirector.h"
00061 //#include "LacNetwork.h"
00062 //#include "LacRunDirector.h"
00063 #include "MichaelisMentenHeterodimerizationReaction.h"
00064 //#include "CombinatorialNetwork.h"
00065 //#include "CombinatorialRunDirector.h"
00066 //#include "CombinatorialNetworkMinimizableDirector.h"
00067 #include "LevenbergMarquardtMinimizer.h"
00068 #include "QuorumSensingEnsembleDirector.h"
00069 #include <fenv.h>
00070 */
00071 
00072 main(int argc, char* argv[])
00073 {
00074 /*      int fe=feenableexcept(FE_ALL_EXCEPT);
00075         if (fe == -1) {
00076                 cout << "feenableexcept unsuccessful\n";
00077         }
00078 */      int i;
00079         std::string defaultkey = "default";
00080         char *parameterfile;
00081         char *method;
00082         int smethod; //to be used in switch
00083         int plotornot;
00084         if (argc == 1) {
00085                 parameterfile = "goodtemp6.par";
00086                 method = "c";
00087                 smethod = method[0];
00088                 plotornot = 1;
00089         }
00090         else {
00091                 parameterfile = argv[1];
00092 //since switch can only use single characters the code for which method to 
00093 // use is:
00094 // c = conjugate gradient
00095 // l = regular levenberg marquardt
00096 // s = scale invariant levenberg marquardt
00097 // b = basic quench (steepest descent with step size 1.0)
00098 // p = plot (steepest descent with step size 0.0)
00099 // h = stochastic sensitivity analysis (h for Hessian)
00100 // e = ensembledirector (adds error bars to plots)
00101                 if (strlen(argv[2]) == 0){
00102                         method = "p";
00103                 }
00104                 else {
00105                         method = argv[2];
00106                 }       
00107                 smethod = method[0];
00108 //if you want to watch the plots, the third argument should be y
00109                 if (strlen(argv[3]) == 0){
00110                         plotornot = 0;
00111                 } // end if no argv3
00112                 else {
00113                         if (argv[3][0] == 'y'){
00114                                 plotornot = 1;
00115                         } // end if argv3 = y
00116                         else {
00117                                 plotornot = 0;
00118                         }//end else argv3 = y
00119                 } // end else no argv3
00120         } // end else strlen
00121 
00122         if (smethod == 'p') {
00123                 plotornot = 1;
00124         }
00125 
00126 //      cout << "plotornot " << plotornot << endl;
00127 
00128         // MICROSOFT DEBUGGING STUFF
00129         //_crtBreakAlloc = 55;  // Breaks at memory allocation failure no. ?
00130         // global variable
00131         //_CrtSetBreakAlloc(1129148);
00132 
00133 //      int tmpFlag = _CRTDBG_REPORT_FLAG;
00134 //      tmpFlag |= _CRTDBG_DELAY_FREE_MEM_DF;
00135 //      tmpFlag |= _CRTDBG_ALLOC_MEM_DF; // use any checking at all.
00136 //      tmpFlag |= _CRTDBG_LEAK_CHECK_DF; // at end of program.
00137 //      tmpFlag |= _CRTDBG_CHECK_ALWAYS_DF; // end of program
00138 //      tmpFlag &= ~_CRTDBG_DELAY_FREE_MEM_DF; // turn it off
00139 
00140         //_CrtSetDbgFlag(_CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF );
00141 
00142         //CRunDirector *rD = new COneGeneInhibitoryNetworkRunDirector();
00143         //CRunDirector *rD = new COneGeneInhibitoryAveragingDirector();
00144         //CRunDirector *rD = new CPC12EGFNGFRunDirector();
00145         //CEnsembleCombinationDirector *rD = new COneGeneEnsembleDirector(250);
00146         //CEnsembleCombinationDirector *rD = new CPC12EGFNGFEnsembleDirector(50);
00147         //CEnsembleCombinationDirector *rD = new CPC12AlternateEnsembleDirector(50);
00148 //      CEnsembleCombinationDirector *rD = new CQuorumSensingEnsembleDirector(5);
00149 //      CRunDirector *rD = new CQuorumSensingRunDirector();
00150         //CRunDirector *rD = new CLacRunDirector();
00151         //CRunDirector *rD = new CCombinatorialRunDirector();
00152 
00153 //      rD->Execute();
00154 //      delete rD;
00155 //      cout << "Done plotting ensembledirector, proceed?" << endl;
00156 //      cin.get();
00157 
00158     // define an uber-minimizable
00159         //NetworkMinimizableDirector *nM = new CPC12AlternateMinimizableDirector();
00160 
00161         //NetworkMinimizableDirector *nM = new PC12EGFNGFMinimizableDirector();
00162 
00163         //NetworkMinimizableDirector *nM = new CCoupledPC12NetworksMinimizableDirector(0.01,0.0);
00164 
00165 //OneGeneInhibitoryNetwork is a quick test case for changes
00166         //NetworkMinimizableDirector *nM = new COneGeneInhibitoryNetworkMinimizableDirector(plotornot);
00167         //NetworkMinimizableDirector *nM = new COneGeneStochasticNetworkMinimizableDirector();
00168 
00169         NetworkMinimizableDirector *nM = new CQuorumSensingNetworkMinimizableDirector(plotornot);
00170 
00171         //NetworkMinimizableDirector *nM = new CCombinatorialNetworkMinimizableDirector();
00172 
00173         //NetworkMinimizableDirector *nM = new CAlternateOneGeneInhibitoryNetworkMinimizableDirector();
00174 
00175         //NetworkMinimizableDirector *nM = new CExampleNetworkMinimizableDirector();
00176 
00177         //NetworkMinimizableDirector *nM = new CCoupledOneGeneNetworksMinimizableDirector(0.01,0.0);
00178 
00179         //NetworkMinimizableDirector *nM = new CEGFRTraffickingCoupledMinimizableDirector(32.0,0.0);
00180 
00181         /*
00182         // read in two sets of parameters
00183         ParameterReader *pR1 = new ParameterReader("min2_cg_woPI3K.par");
00184         double *p1 = new double[nM->GetNParameters()];
00185         for(int i = 0; i < nM->GetNParameters(); i++)
00186         {
00187                 p1[i] = pR1->ReadParameter();
00188         }
00189         delete pR1;
00190         ParameterReader *pR2 = new ParameterReader("min3_cg_woPI3K.par");
00191         double *p2 = new double[nM->GetNParameters()];
00192         for(i = 0; i < nM->GetNParameters(); i++)
00193         {
00194                 p2[i] = pR2->ReadParameter();
00195         }
00196         delete pR2;
00197         ParameterReader *pR3 = new ParameterReader("min4_cg_woPI3K.par");
00198         double *p3 = new double[nM->GetNParameters()];
00199         for(i = 0; i < nM->GetNParameters(); i++)
00200         {
00201                 p3[i] = pR3->ReadParameter();
00202         }
00203         delete pR3;
00204         
00205         // create the mapper and filter
00206         CLowDimensionalCostFunctionMapper *pMap = new CLowDimensionalCostFunctionMapper();
00207         CParameterFilter *pFilter = new CLogParameterFilter();
00208         // do the mapping
00209         pMap->Map(nM,pFilter,p1,p2,p3,-1,1,-1,1,961);
00210 
00211         delete pMap;
00212         delete pFilter;
00213         delete nM;
00214         delete [] p1;
00215         delete [] p2;
00216         delete [] p3;
00217         */
00218 
00219         double *parameters = new double[nM->GetNParameters()];
00220         cout << "Total number of parameters is " << nM->GetNParameters() << endl;
00221         if (parameterfile == defaultkey ) {
00222                 // use default parameters
00223                 for(i = 0; i < nM->GetNParameters(); i++)
00224                 {
00225                         parameters[i] = nM->GetParameter(i);
00226                 }
00227         }
00228         else {
00229                 // read parameters from previous optimization pass
00230                 ParameterReader *pReader = new ParameterReader(parameterfile);
00231                 for(i = 0; i < nM->GetNParameters(); i++)
00232                 {
00233                         parameters[i] = pReader->ReadParameter();
00234                 }
00235                 delete pReader;
00236         }
00237 
00238 /*      // randomize parameters
00239         CParameterRandomizer *pR = new CParameterRandomizer(9891);
00240         pR->Randomize(parameters,nM->GetNParameters(),0.25,1);
00241 */
00242         //Print reactions in tex or mathematica input
00243 /*      ReactionNetwork *rN = new CQuorumSensingNetwork();
00244         rN->GetReactions();
00245         rN->DumpTeXForm("QSequations.tex");
00246 //      rN->DumpMathematicaForm("steadystate.dat");
00247         delete rN;
00248         cout << "texform printed\n";
00249         cin.get();
00250 */
00251         /*
00252         // randomize parameters
00253         CParameterRandomizer *pR = new CParameterRandomizer(776157);
00254         pR->Randomize(parameters,nM->GetNParameters(),0.5,3);
00255         */
00256 
00257         //cout << nM->ObjectiveFunction(parameters) << endl;
00258 
00259         /*
00260         // STEPSIZE TESTER - FOR USE WITH STOCHASTIC SENSITIVITY
00261         // evaluate the objective function at the minimum to determine what size step
00262         // to give to fixed stepsize mover
00263         double cost = nM->ObjectiveFunction(parameters);
00264         cout << "Cost of parameter set is " << cost << endl;
00265         for(int nEx = 0; nEx < nM->GetNExperiments(); nEx++)
00266         {
00267                 cout << "Experiment " << nEx << ":" << endl;
00268                 cout << "\tSmallest stepsize was " << nM->GetMover(nEx)->GetMinStepSize() << endl;
00269                 cout << "\tLargest stepsize was " << nM->GetMover(nEx)->GetMaxStepSize() << endl;
00270                 cout << "\tTotal number of steps was " << nM->GetMover(nEx)->GetTotalStepsTaken() << endl;
00271         }
00272         // just a dummy so I don't have to keep commenting out delete statement at bottom
00273         Minimizer *minimizer = new CBasicQuenchMinimizer(1,10,1.0,1);
00274         */
00275         
00276 /*      CParameterFilter *pFilter = new CLogParameterFilter();
00277         CStochasticSensitivityAnalysis *minimizer = new CStochasticSensitivityAnalysis(false,true,25,2115,pFilter,1.0e-6);
00278         cout << "Performing Stochastic Sensitivity Analysis" << endl;
00279         minimizer->DoAnalysis(parameters,nM);
00280         cout << "RW Variance : " << minimizer->GetRWValue() << endl;
00281         delete pFilter;
00282 */
00283         /*
00284         cout << "(mu/rho,lambda)-ES One Selected" << endl;
00285         CParameterFilter *filter = new CLogParameterFilter();
00286         Minimizer *minimizer = new CCommaStrategyOne(filter,1.0,15,2,50,100,887);
00287         double cost = minimizer->Minimize(parameters,nM);
00288         cout << "Average cost of final population " << cost << endl;
00289         delete filter;
00290         */
00291         /*
00292         cout << "(mu,lambda)-ES Selected" << endl;
00293         CParameterFilter *filter = new CLogParameterFilter();
00294         Minimizer *minimizer = new CClonalCommaES(filter,0.0,15,100,1109);
00295         double cost = minimizer->Minimize(parameters,nM);
00296         cout << "Average cost of final population " << cost << endl;
00297         delete filter;
00298         */
00299 
00300         // BE CAREFUL WITH THE ERROR TOLERANCE, PARTICULARLY IF YOU USE A LOW ORDER
00301         // INTEGRATOR
00302 //      CParameterFilter *filter = new CIdentityParameterFilter();
00303         CParameterFilter *filter = new CLogParameterFilter();
00304         double cost;
00305         Minimizer *minimizer;
00306         int nEquilibrationSteps;
00307         double stepScale;
00308         CLeastSquaresObserver *LMForcesObserver = new CLeastSquaresObserver();
00309         switch (smethod) {
00310         case 'l':
00311                 cout << "Levenberg-Marquardt Selected" << endl;
00312                 minimizer = new CImprovedLevenbergMarquardtMinimizer(filter,false,1.0e-06,false,1.0e-08,true,1.0e-06,true,1.0e-06,1000,1.0e-06);
00313                 //CLeastSquaresObserver *LMForcesObserver = new CLeastSquaresObserver();
00314                 minimizer->Attach(LMForcesObserver);
00315                 cost = minimizer->Minimize(parameters,nM);
00316                 cout << "Final cost of " << cost << endl;
00317                 minimizer->Detach(LMForcesObserver);
00318                 delete filter;
00319                 break;
00320 
00321         case 's':
00322                 cout << "Scale-Invariant Levenberg-Marquardt Selected" << endl;
00323                 minimizer = new CScaleInvariantMarquardtMinimizer(filter,false,1.0e-2,true,1.0e-08,true,1.0e-06,true,1.0e-06,1000,1.0e-06);
00324                 cost = minimizer->Minimize(parameters,nM);
00325                 cout << "Final cost of " << cost << endl;
00326                 delete filter;
00327                 break;
00328 
00329         case 'c':
00330                 cout << "Conjugate Gradient Selected" << endl;
00331                 minimizer = new CConjugateGradientMinimizer(false,filter,3,1.0e-06);
00332 //      CConjugateGradientObserver *CGForcesObserver = new CConjugateGradientObserver();
00333 //      minimizer->Attach(CGForcesObserver);
00334                 cost = minimizer->Minimize(parameters,nM);
00335 //      minimizer->Detach(CGForcesObserver);
00336                 delete filter;
00337                 break;
00338 
00339         case 'p':
00340 //      GnuPlotterSimulatedAnnealingObserver *costObserver = new GnuPlotterSimulatedAnnealingObserver();
00341 //      costObserver->SetTitle("Basic Quench");
00342                 cout << "Plot Selected" << endl;
00343                 nEquilibrationSteps = 25;
00344                 stepScale = 0.0;
00345                 minimizer = new CBasicQuenchMinimizer(nEquilibrationSteps,10,stepScale,99449,filter);
00346 //      minimizer->Attach(costObserver);
00347                 cost = minimizer->Minimize(parameters,nM);
00348 //      minimizer->Detach(costObserver);
00349 //      delete costObserver;
00350                 break;
00351 
00352         case 'b':
00353 //      GnuPlotterSimulatedAnnealingObserver *costObserver = new GnuPlotterSimulatedAnnealingObserver();
00354 //      costObserver->SetTitle("Basic Quench");
00355                 cout << "Basic Quench Selected" << endl;
00356                 nEquilibrationSteps = 25;
00357                 stepScale = 1.0;
00358                 minimizer = new CBasicQuenchMinimizer(nEquilibrationSteps,10,stepScale,99449,filter);
00359 //      minimizer->Attach(costObserver);
00360                 cost = minimizer->Minimize(parameters,nM);
00361 //      minimizer->Detach(costObserver);
00362 //      delete costObserver;
00363                 break;
00364 
00365         case 'h':
00366                 CParameterFilter *pFilter = new CLogParameterFilter();
00367                 CStochasticSensitivityAnalysis *minimizer = new CStochasticSensitivityAnalysis(false,true,50,2115,pFilter,1.0e-6);
00368                 cout << "Performing Stochastic Sensitivity Analysis" << endl;
00369                 minimizer->DoAnalysis(parameters,nM);
00370                 cout << "RW Variance : " << minimizer->GetRWValue() << endl;
00371                 delete pFilter;
00372                 break;
00373 
00374         }//end switch method
00375 
00376         cout << "Best cost for this minimization is " << cost << endl;
00377         // write the best parameters to a file and stdout
00378         fstream *pfbest = new fstream("goodtemp10.par",ios::out);
00379         *pfbest << "##################################################################" << endl;
00380         *pfbest << "# BEST PARAMETERS" << endl;
00381         *pfbest << "# COST : " << cost << endl;
00382         *pfbest << "##################################################################" << endl;
00383         for(i = 0; i < nM->GetNParameters(); i++)
00384         {
00385                 *pfbest << parameters[i] << endl;
00386         }
00387         delete pfbest;
00388 
00389         cout << "finish?" << endl;
00390         cin.get();
00391 
00392         delete minimizer;
00393         delete [] parameters;
00394         delete nM;
00395 
00396         return 0;
00397 
00398 }

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