1. 程式人生 > >階梯型遞進模型演算法的實現

階梯型遞進模型演算法的實現



這是我要搭建的模型。

大體說下:

就是需要建立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;
}