階梯型遞進模型演算法的實現
阿新 • • 發佈:2018-12-04
這是我要搭建的模型。
大體說下:
就是需要建立6級階梯模型,每一級都分成兩個階段。比如開始的principal是2400,然後進入第一級隨機增減,一共的12個階段分別是
1 3 2 6 4 12 8 24 16 48 32 96
什麼意思呢,1 3 對應1-1;1-2 。2 6 對應2-1 2-2、以此類推
1,首先看第一級,1 3 即把principal分成4份,1-1 佔1份,1-2佔3份。第二級以此類推。
2,當第一級中的1-1份數隨機減掉了後,就開始進入1-2 。
3. 在1-2中將1-1的份額提升回來後,重新進入1-1 。如果1-2 的份額也消耗完,就結束了。
4,當1-1積累了原來的初始的3倍後,進入第二級中的2-1 。。後面執行流程同第一級。不同的是:
1)進入第二級時的principal不再是第一級中1-1的3倍。而是1-1的2倍。剩下的部分儲存起來。壓入堆疊中。
2)當2-2中的份額消耗結束後,第二級結束,同時流程回退到第一級,這時將堆疊中的儲存量pop出來作為第一級的principal。
5,後面第二級積累到2級初始值的3倍後,進入第三級,同樣操作堆疊儲存。第4級,5級以此類推。。。
6,知道第六級中積累到規定量後,流程結束。
下面是我用c++實現的過程:
// level.cpp : 定義控制檯應用程式的入口點。 // #include "stdafx.h" #include <iostream> #include <stack> #include <math.h> using namespace std; int Betting( int cur,int plan[][2],int i,int j,int principal,int times) { //for (;i<6;i++) //{ // j=0; // for (;j<2;j++) // { // cout<<plan[i][j]<<"\t"; // } // cout<<"\n"; //} //..... cout<<"<Betting> plan: "<<plan[i][j]<<" i: "<<i<<" j: "<<j<<endl; //int min_num=plan[i][j]*principal/10; //int rand_num=rand()%(2*min_num)-min_num; //cout<<"<Betting> rand_num: "<<rand_num<<endl; //cur=cur+rand_num; if (times<=4) cur=cur*3; else cur=cur+10000; //cout<<"<Betting> cur: "<<cur<<endl; return cur; } int main(int argc, _TCHAR* argv[]) { int principal=2400; int income=principal; int i=0,j=0; stack <int> storage; int total[6]={0}; int level=1; /* *根據初始值及級別設定儲存值 *e.g. *principal=3,total[]={0 3 9 21 45 93}; */ for (int index=1;index<6;index++) { total[index]=total[index-1]+principal*level; level=level*2; } /*for (int index=0;index<6;index++) { cout<<total[index]<<"\t"; }*/ storage.push(total[i]); //int plan[6][2]={1,2,2,4,4,8,8,16,16,32,20,40}; int plan[6][2]={1,3,2,6,4,12,8,24,16,48,32,96}; int cur=income; for (int times=0;times<15;times++) { //cout<<"<main> cur:"<<cur<<endl; cur=Betting(cur,plan,i,j,principal,times); //cout<<"<main> cur:"<<cur<<endl; if (cur>= principal*pow((double) 2,i+1)*3/2&&i<=4) { j=0; i++; //if (i>=5) //{ // break; //} cur=cur-total[i]+storage.top(); storage.push(total[i]); }else if(0>=cur) { j=0; i--; if (i<0) { break; } cur=storage.top(); storage.pop(); cur=cur-storage.top(); }else if(cur<=principal*pow((double) 2,i+1)/3) { //cout<<"<main> cur:"<<cur<<" "<<((int) pow((double) 2,i+1))<<endl; j=1; } cout<<"<main> cur:"<<cur<<endl; } income=cur+storage.top(); cout<<"income: "<<income<<endl; cout<<"storage:"<<endl; while(storage.size()>0) { cout<<storage.top()<<endl; storage.pop(); } return 0; }