#include "TMath.h" #include "TCanvas.h" #include "TRandom.h" #include "TGraph.h" #include "Riostream.h" #include "exception" #include "TFile.h" #include "TTree.h" #include "TPad.h" #include "TVirtualPad.h" #include "TMultiLayerPerceptron.h" #include "TMLPAnalyzer.h" #include "TH2F.h" void train() { Int_t ntrain = 200; Int_t n = 211; Int_t i = 0; Int_t j = 0; Int_t start = 200; Int_t end = start + n; Int_t nlines = 479; Float_t price0; Float_t price1; Float_t price2; Float_t price3; Float_t price4; Float_t price5; Float_t production; Float_t import; Float_t list0[479]; Float_t list1[479]; Float_t list2[479]; Float_t list3[479]; Float_t list4[479]; Float_t list5[479]; Float_t par1[479]; Float_t par2[479]; TMultiLayerPerceptron *mlp1; TMultiLayerPerceptron *mlp; TMLPAnalyzer *mlpa; Double_t params[7]; Float_t x[211]; Float_t y1[211]; Float_t y2[211]; Float_t money = 10000; Float_t stock = 0; Float_t total = 10000; Float_t val0; Float_t val1; Float_t val2; // Float_t val3; TH2F hpx; ifstream in; in.open("data.txt"); for (i=0;i> price5 >> price4 >> price3 >> price2 >> price1 >> price0 >> production >> import; list0[i] = price0 ; list1[i] = price1 ; list2[i] = price2 ; list3[i] = price3 ; list4[i] = price4 ; list5[i] = price5 ; par1[i] = production; par2[i] = import; } in.close(); for (i=start;iBranch("price5",&price5,"price5/F"); milk->Branch("price4",&price4,"price4/F"); milk->Branch("price3",&price3,"price3/F"); milk->Branch("price2",&price2,"price2/F"); milk->Branch("price1",&price1,"price1/F"); milk->Branch("price0",&price0,"price0/F"); milk->Branch("production",&production,"production/F"); milk->Branch("import",&import,"import/F"); for (j=1;jFill(); } hfile->cd(); milk->Write(); mlp = new TMultiLayerPerceptron("price0,price1,price2,price3,price4,production,import:14:price5",milk,"Entry$%2","(Entry$+1)%2"); mlp->Train(ntrain, "update=10"); mlp->DumpWeights("milk.txt"); hfile->Close(); // free memory //delete mlp; //delete milk; //delete hfile; TFile *train_file = new TFile ("milk.root"); TTree *milk1 = (TTree*)train_file->Get("milk"); milk1->SetBranchAddress("price5",&price5); milk1->SetBranchAddress("price4",&price4); milk1->SetBranchAddress("price3",&price3); milk1->SetBranchAddress("price2",&price2); milk1->SetBranchAddress("price1",&price1); milk1->SetBranchAddress("price0",&price0); milk1->SetBranchAddress("production",&production); milk1->SetBranchAddress("production",&production); mlp1 = new TMultiLayerPerceptron("price0,price1,price2,price3,price4,production,import:14:price5",milk1); mlpa = new TMLPAnalyzer(mlp1); mlpa->GatherInformations(); mlpa->CheckNetwork(); mlp1->LoadWeights("milk.txt"); // today is list5[i], // day-1 params[0] = list0[i-2]; params[1] = list1[i-2]; params[2] = list2[i-2]; params[3] = list3[i-2]; params[4] = list4[i-2]; params[5] = par1[i-2]; params[6] = par2[i-2]; val0 = mlp1->Evaluate(0, params); // day0 params[0] = list0[i-1]; params[1] = list1[i-1]; params[2] = list2[i-1]; params[3] = list3[i-1]; params[4] = list4[i-1]; params[5] = par1[i-1]; params[6] = par2[i-1]; val1 = mlp1->Evaluate(0, params); // day1 is today params[0] = list0[i]; params[1] = list1[i]; params[2] = list2[i]; params[3] = list3[i]; params[4] = list4[i]; params[5] = par1[i]; params[6] = par2[i]; val2 = mlp1->Evaluate(0, params); // day2 /* params[0] = list0[i+1]; params[1] = list1[i+1]; params[2] = list2[i+1]; params[3] = list3[i+1]; params[4] = list4[i+1]; params[5] = par1[i+1]; params[6] = par2[i+1]; val2 = mlp1->Evaluate(0, params); */ y1[i-start] = list5[i]; y2[i-start] = val2; x[i-start] = i; printf("%s %f %s %f %s %f %s %f %s %f \n", "ANN_day-2=", val0, "ANN_yesterday=",val1, "ANN_today=",val2, "Money = ",money, "Stock=",stock); printf("%s %f %s %f %s %f %s %f %s %f \n", "Rea_day-2=", list5[i-1], "Rea_yesterday=",list5[i], "Rea_today=",list5[i+1], "Money = ",money, "Stock=",stock); if (( val1 < val0) && (val1 < val2)){ if (money>1){ stock = money/list5[i]; money = 0; total = stock*list5[i]; printf(" %s %f %s %f %s %f %s %f %s \n ", "Money=",money, "Stock=", stock, "Price_today=",list5[i], "Total=", total, "---------------------------buy"); } } if (( val1 > val0) && (val1 > val2)){ if (stock>1){ money = stock*list5[i]; stock = 0; total = money; printf(" %s %f %s %f %s %f %s %f %s \n ", "Money=", money, "Stock=", stock, "Price_today=", list5[i],"Total=",total, "---------------------------sell"); } } // free memory //delete mlp1; //delete mlpa; //delete milk1; //delete train_file; } /* TCanvas *c1 = new TCanvas("c1", "Vavilov density"); c1->SetGrid(); c1->SetFillColor(0); c1->SetFrameFillColor(0); c1->SetFrameLineWidth(2); c1->SetFrameBorderMode(0); c1->SetFrameBorderSize(2); TH2F *hpx = new TH2F("graph","graph",10,start,end,20,0,3); hpx->Draw(); TGraph *gr1 = new TGraph(n,x,y1); TGraph *gr2 = new TGraph(n,x,y2); gr1->GetXaxis()->SetNdivisions(606); gr1->SetLineWidth(2); gr1->SetMarkerStyle(25); gr1->SetMarkerSize(0.7); gr1->Draw("L"); gr2->GetXaxis()->SetNdivisions(606); gr2->SetMarkerStyle(30); gr2->SetMarkerSize(0.7); gr2->SetLineWidth(2); gr2->SetLineColor(2); gr2->Draw("L"); */ }