24小时热门版块排行榜    

CyRhmU.jpeg
查看: 2349  |  回复: 12

亚star

新虫 (小有名气)

[求助] 求助高手将以下C语言翻译为Matlab语言,急急急!

#include  
#include  
#include  
#include  
#include  
#include  
#include  
#define   Fit_name     "fit.ga"
#define   Indiv_name   "ind.ga"
#define   Result_name  "out.ga"
#define   Test_name    "test.ga"
#define   Cont_name    "ctr.ga"
#define   Mv_name      "m_v.ga"
#define   Amv_name     "am_v.ga"
#define   _in_varl     2
#define   _out_varl    1
#define   _rule        4
#define   _pi          3.1415926
#define   _order       1
#define   _time1        250
#define   _popsize    50
#define   _maxgen     500   // max generation
#define   _number   2       // for tournament selection
float   _pmutation = 0.1 ;   // initial mutation probability
float   _pcrossover= 0.4 ;
const int _lchrom =  _rule*(2*_in_varl+ (_in_varl+1)*_out_varl) ;
class  Data
{
   public  :
   float   in[_in_varl+1],out[_out_varl+1], ym[_order+1],yp[_order+1] ;
   float   scale_in[_in_varl+1] ,scale_out[_out_varl+1];
   Data()  ;
   void    input(int) ;
   void    output(float *,float *) ;
   void    init(void);
   void    Save() ;
} ;
Data :: Data()
{
     int i ;
   for(i=0;i<_order;i++)
   {  yp = 2 ;
   }
   for(i=0;i<_in_varl;i++)
     scale_in = 4.2 ;
   for(i=0;i<_out_varl;i++)
     scale_out = 4.2 ;
}
class Rule
{
friend void  Eva_out(float *,Data ,int,Rule *) ;
float in_mu,f[_out_varl+1] ;
public :
void    In_mem(Data,int,int) ;
} ;
class  Population
{
   friend class  Rule ;
   friend void  generation(int,int *) ;
   friend void  Crossover(int,int,int) ;
   friend void  report(float,float,float,char *) ;
   friend void  Eva_out(float *,Data ,int,Rule *) ;
   friend void  Save(int) ;
   float   chrom[_lchrom+1], sum_fitness, in_mu, x  ;
   int     checked ;
   public :
   float   fitness ;
   Population() {sum_fitness = 0 ; }
   void    clear() ;
   void    initpop(void) ;
   void    Save_m_v(FILE *ft) ;
   void    objfunc(float) ;   
}  ;
inline float phi(float x,float mm,float v)
{ return(  exp( - (x-mm)*(x-mm)/(v*v) )) ; }
inline float max(float a , float b)
{ return ( ( a>b) ? a :b); }
template
Type mutation(Type ge,int j)
{
int i,n,m ;
  n = 2*_in_varl+_out_varl ;
  m = _rule*n ;
if (flip(_pmutation))
{
   if (j<=m)
   {
       i = j%n ;
           if (( i == 0 ) || (i > 2*_in_varl) ) ge  =   (rand()%(4000)-2000)/1300.0 ;    // consequent parameter a0
       else if ( i%2 == 1 )  ge =  (rand()%(200) - 100)/100.0 ;  // mean value
       else  ge =  0.05+ (rand()%700)/1000.0 ;   // width
   }
   else ge =  (rand()%(4000)-2000)/1300.0 ; // TSK-type consequence a1 -- an
_nmutation = _nmutation + 1 ;
}
return ge ;
}
int   select(int) ;
void  initialize(void) ;
void  statistics(float *,float *,float *, float, int) ;
void  generation(int, int *) ;
void  report(float,float,float,char *) ;
float Eva_Fitness(int,int) ;
Population   _oldpop[_popsize+1],_newpop[_popsize+1]  ;
int     _nmutation=0,_nncross=0 ;
float   _sumfitness, _avg,_max,_min  ;
int main(void)
{
int   max  ,gen ;
void Save(int) ;
time_t tt;
srand((unsigned) time(&tt));
initialize() ;
for(gen=1; gen < _maxgen;gen++)
{
  cout << "\n Generation is --- " << gen ;
  generation(gen,&max) ;
}
  cout << "\n *******  The  End ****** " ;
  Save(max) ;
  return(0);
}
void initialize()
{
  int j ;
  Data  train;
  float fmax_fit=-1E7, fmin_fit=1E7, ave_fit=0 ,fit ;
  FILE *fm ;
cout << "\n Initial generation   " << endl ;
  for(j=1;j<=_popsize;j++)
  {   _newpop[j].initpop();
      _newpop[j].clear() ;
  }
  for(j=1;j<=_popsize;j++)
  {
      fit =  Eva_Fitness(j,0) ;
      statistics(&fmax_fit,&fmin_fit,&ave_fit,fit,j) ;
     _newpop[j].objfunc(fit) ;
  }
  if( (fm=fopen(Mv_name,"w")==NULL) exit(1) ;
  for(j=1;j<=_popsize;j++)
    _newpop[j].Save_m_v(fm) ;
  fclose(fm) ;
  report(fmax_fit,fmin_fit,ave_fit,Fit_name) ;
  for(j=1;j<=_popsize;j++)
   {  _oldpop[j] = _newpop[j] ;
    }
}
float Eva_Fitness(int jj,int gen)
{
  int k ;
  float act_out[_out_varl+1], error, fit=0 ;
  Data t ;
  Rule  rules[_rule+1] ;
for(k=1;k<=_time1;k++)
{
    t.input(k) ;
    Eva_out(act_out,t,jj,rules) ;
    t.output(&error,act_out) ;
    fit = fit + error ;
}
    return  1./fit ;
}
void  Data::input(int k)
{
ym[_order] = sin(2*_pi*k/100);
in[0] = ym[_order]/scale_in[0] ;
in[1] = yp[_order]/scale_in[1] ;
}
void  Data:utput(float *err,float *u)
{
int i ;
yp[_order]  = yp[_order-1]/(1+yp[_order-1]*yp[_order-1])+u[0]*u[0]*u[0];
*err = (yp[_order] - ym[_order])*(yp[_order] - ym[_order]) ;
   for(i=1;i <=_order; i++)
{  yp[i-1] = yp ;
}
}
void Data::init()
{
int i ;
   for(i=0;i<_order;i++)
     yp = -2 ;
        
}
void Eva_out(float *y,Data t,int jj,Rule *rules)
{
  int i,j,k,n,mm,nn,kk ;
  float *den , *num ;
   mm = 2*_in_varl+_out_varl ;
   nn = _rule*mm ;
   kk = nn + _rule*_rule ;
  if ( !( num = new float[_rule+1] ) ||
       !( den = new float[_rule+1] ) )
  {  cout << "\n Insufficient memory for num " ;
     exit(1) ;
  }
  for(k=1;k<=_rule;k++)
     rules[k].In_mem(t,jj,k) ;  // firing strength
  for(j=0;j< _out_varl;j++)
  {
      for(n=1;n<=_rule;n++)
     {        rules[n].f[j] = _newpop[jj].chrom[(n-1)*mm+2*_in_varl+1] ;
          for(i=1;i<=_in_varl;i++)
           rules[n].f[j] += _newpop[jj].chrom[nn+(_in_varl)*(n-1)+i]*t.in[i-1] ; //consequence value
     }
      den[j] = 0 ;
      num[j] = 0 ;
    for(n=1;n<= _rule;n++)
     {  den[j] = den[j] +  rules[n].in_mu ;
        num[j] = num[j] +   rules[n].in_mu * rules[n].f[j] ;
     }
    if ( fabs(den[j]) < 1E-10 )
      *(y+j) = 0 ;
    else
      *(y+j) = num[j]/den[j] ;  //defuzzify  
  }
  delete [] den ;
  delete [] num ;
}
void Population::clear()
{
   fitness = 0 ;
   checked = 0 ;
}
void Rule::In_mem(Data x,int jj,int k)
{
  int i,n ;
in_mu =  1. ;
n = 2*_in_varl+_out_varl ;
for(i=1;i<= _in_varl;i++)
  in_mu = in_mu *
  phi(x.in[i-1],_newpop[jj].chrom[(k-1)*n+2*i-1],
                _newpop[jj].chrom[(k-1)*n+2*i]) ;
}
void Population :: initpop()
{
int i,j1,n,m,j ;
n = 2*_in_varl+_out_varl ;
m = _rule*n ;
for(i=0;i<_rule;i++)
{  for(j1=1;j1<=_in_varl;j1++)
   {  chrom[i*n+2*j1-1] = (rand()%200 -100 )/100.;   // center
      chrom[i*n+2*j1] =  0.05 + (rand()%700)/1000.0 ;  //width
   }
   for(j=1;j<=_out_varl;j++)
    chrom[i*n+2*_in_varl+j] = (rand()%(4000)-2000)/1200. ;    // consequence
}
   for(j1=1;j1<=_rule;j1++)
     for(i=1;i<=_in_varl;i++)
        chrom[m+(j1-1)*(_in_varl) + i ] =  (rand()%(8000)-4000)/2600.  ;  // TSK linear parameter
}
void Population :: objfunc(float fit)
{
  fitness = fit ;
}
void   statistics(float *max_fit,float *min_fit,float *ave_fit,float fit,int j)
{
if ( fit > *max_fit )  { *max_fit = fit ;  }
if ( fit < *min_fit ) { *min_fit = fit ; }
*ave_fit = *ave_fit + (1.0/(j+1))*(fit - *ave_fit)  ;
int flip(float prob)
{
int i,j ;
i = rand()%(10001) ;
if ( i  < 10000*prob )
j = 1 ;
else
j = 0 ;
return j ;
}
void generation(int _gen,int *max)
{       
int   i,mate1,mate2;
float  max_f=-1E8;
float  fmax_fit=-1E8,fmin_fit=1E8  ;
float  fit,ave_fit=0 ;
  for(i=1;i<=_popsize;i++)
  { if ( _oldpop.fitness >  max_f )
        {    max_f =  _oldpop.fitness   ;
             *max = i ;
          }  // end if
   } // end for i
for(i=1;i<= _popsize/2;i++)
{
mate1 = select(_popsize) ;
mate2 = select(_popsize) ;
Crossover(i,mate1,mate2) ;
}
     _newpop[ *max] = _oldpop[*max] ;
  for(i=1;i<=_popsize;i++)
  {
   _newpop.clear() ;
  }
  for(i=1;i<=_popsize;i++)
  {
      fit =  Eva_Fitness(i,_gen) ;
      statistics(&fmax_fit,&fmin_fit,&ave_fit,fit,i) ;
     _newpop.objfunc(fit) ;
  }
  report(fmax_fit,fmin_fit,ave_fit,Fit_name) ;
  for(i=1;i<=_popsize;i++)
     _oldpop = _newpop ;
}
void  Crossover(int i,int mate1,int mate2)
{
int j,jcross ;
if (flip(_pcrossover))
{  jcross = rand()%(_lchrom-1) +1 ;
for(j=1;j<=jcross;j++)
{
_newpop[ _popsize - 2*(i-1) ].chrom[j]
     = mutation( _oldpop[mate1].chrom[j],j);
_newpop[ _popsize - 2*(i-1) - 1 ].chrom[j]
     = mutation( _oldpop[mate2].chrom[j],j);
}
for (j=jcross+1;j<=_lchrom;j++)
{
_newpop[ _popsize - 2*(i-1) ].chrom[j]
     = mutation( _oldpop[mate2].chrom[j],j);
_newpop[ _popsize - 2*(i-1) - 1 ].chrom[j]
      = mutation( _oldpop[mate1].chrom[j],j);
}
}
else
{
for(j=1;j<=_lchrom;j++)
{
_newpop[ _popsize - 2*(i-1) ].chrom[j]
     =  _oldpop[mate1].chrom[j] ;
_newpop[ _popsize - 2*(i-1) - 1 ].chrom[j]
     =  _oldpop[mate2].chrom[j];
}
}
}
int select(int range)
{
int ran[_number+1] ;
float max_value ;
int max,j=0 ;
for(j=1;j<=_number;j++)
   ran[j] = rand()%(range) + 1  ;
  max = ran[1] ;
  max_value = _oldpop[ran[1]].fitness ;
  for(j=2;j<=_number;j++)
  {
     if ( _oldpop[ran[j]].fitness >  max_value )
       { max = ran[j] ;
         max_value =  _oldpop[ran[j]].fitness ;
        }
  }
  return max ;
}
void   report(float max_fit,float min_fit,float ave_fit,char *p)
{
static int i= 0 ;
FILE *fm ;
  i++  ;
cout << "\n max --- " << max_fit <<
        " , min --- " << min_fit << " , avg -- " << ave_fit ;
cout << "  Nmutation " << _nmutation  ;
if (i==2) { _nmutation = 0 ; i = 0 ; }
   if( (fm=fopen(p,"a")==NULL) exit(1) ;
       fprintf(fm,"%f  %f  %f" ,max_fit,min_fit,ave_fit) ;
  fprintf(fm,"\n" ;
fclose(fm);
}
void Save(int max)
{
long int k ;
FILE *fm ;
float act_out[_out_varl+1],error ;
Data t ;
Rule  rules[_rule+1] ;
void Save_Con(float *);
  if( (fm=fopen(Amv_name,"w")==NULL) exit(1) ;
     _newpop[max].Save_m_v(fm) ;
  fclose(fm) ;
for(k=1;k<=_time1;k++)
{
    t.input(k) ;
    Eva_out(act_out,t,max,rules) ;
    t.output(&error,act_out) ;
    Save_Con(act_out);
    t.Save();
}
}
void Save_Con(float *u)
{
     FILE *fout ;
if( (fout=fopen(Cont_name,"a")==NULL) exit(1) ;
  fprintf(fout,"%f \n", u[0] ) ;
   fclose(fout) ;
}
void Data::Save()
{
   FILE *fout ;
if( (fout=fopen(Result_name,"a")==NULL) exit(1) ;
  fprintf(fout,"%f %f \n", yp[_order],ym[_order] ) ;
   fclose(fout) ;
}
void Population::Save_m_v(FILE  *ft)
{
  int k ;
  for(k=1;k<=_lchrom;k++)
       fprintf(ft," %f", chrom[k] ) ;
  fprintf(ft,"\n" ;
}
回复此楼

» 猜你喜欢

» 本主题相关价值贴推荐,对您同样有帮助:

已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

wu20811055

铜虫 (职业作家)

【答案】应助回帖

感谢参与,应助指数 +1
不好译;但可以在matlab中调用就行了,(具体调用去网上找,一大堆)因为单独从程序上来说,简单转化是可以的,但是你的程序里面又调用了不少库函数,在matlab中对应起来相当困难,如果没有头文件什么的,转换倒不是问题,。。。
希望从这里腾飞
2楼2012-06-07 18:07:40
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

libralibra

至尊木虫 (著名写手)

骠骑将军

【答案】应助回帖

感谢参与,应助指数 +1
这是遗传算法吧,matlab有现成的
CODE:
>> help ga
GA    Constrained optimization using genetic algorithm.
    GA attempts to solve problems of the form:
        min F(X)  subject to:  A*X  <= B, Aeq*X  = Beq (linear constraints)
         X                     C(X) <= 0, Ceq(X) = 0 (nonlinear constraints)
                               LB <= X <= ub

    X = GA(FITNESSFCN,NVARS) finds a local unconstrained minimum X to the
    FITNESSFCN using GA. NVARS is the dimension (number of design
    variables) of the FITNESSFCN. FITNESSFCN accepts a vector X of size
    1-by-NVARS, and returns a scalar evaluated at X.

    X = GA(FITNESSFCN,NVARS,A,b) finds a local minimum X to the function
    FITNESSFCN, subject to the linear inequalities A*X <= B. Linear
    constraints are not satisfied when the PopulationType option is set to
    'bitString' or 'custom'. See the documentation for details.

    X = GA(FITNESSFCN,NVARS,A,b,Aeq,beq) finds a local minimum X to the
    function FITNESSFCN, subject to the linear equalities Aeq*X = beq as
    well as A*X <= B. (Set A=[] and B=[] if no inequalities exist.) Linear
    constraints are not satisfied when the PopulationType option is set to
    'bitString' or 'custom'. See the documentation for details.

    X = GA(FITNESSFCN,NVARS,A,b,Aeq,beq,lb,ub) defines a set of lower and
    upper bounds on the design variables, X, so that a solution is found in
    the range lb <= X <= ub. Use empty matrices for lb and ub if no bounds
    exist. Set lb(i) = -Inf if X(i) is unbounded below;  set ub(i) = Inf if
    X(i) is unbounded above. Linear constraints are not satisfied when the
    PopulationType option is set to 'bitString' or 'custom'. See the
    documentation for details.

    X = GA(FITNESSFCN,NVARS,A,b,Aeq,beq,lb,ub,NONLCON) subjects the
    minimization to the constraints defined in NONLCON. The function
    NONLCON accepts X and returns the vectors C and Ceq, representing the
    nonlinear inequalities and equalities respectively. GA minimizes
    FITNESSFCN such that C(X)<=0 and Ceq(X)=0. (Set lb=[] and/or ub=[] if
    no bounds exist.) Nonlinear constraints are not satisfied when the
    PopulationType option is set to 'bitString' or 'custom'. See the
    documentation for details.

    X = GA(FITNESSFCN,NVARS,A,b,Aeq,beq,lb,ub,NONLCON,options) minimizes
    with the default optimization parameters replaced by values in the
    structure OPTIONS. OPTIONS can be created with the GAOPTIMSET function.
    See GAOPTIMSET for details.

    X = GA(PROBLEM) finds the minimum for PROBLEM. PROBLEM is a structure
    that has the following fields:
        fitnessfcn:
             nvars:
             Aineq:
             bineq:
               Aeq:
               beq:
                lb:
                ub:
           nonlcon:
           options:
          rngstate:

    [X,FVAL] = GA(FITNESSFCN, ...) returns FVAL, the value of the fitness
    function FITNESSFCN at the solution X.

    [X,FVAL,EXITFLAG] = GA(FITNESSFCN, ...) returns EXITFLAG which
    describes the exit condition of GA. Possible values of EXITFLAG and the
    corresponding exit conditions are

      1 Average change in value of the fitness function over
         options.StallGenLimit generations less than options.TolFun and
         constraint violation less than options.TolCon.
      3 The value of the fitness function did not change in
         options.StallGenLimit generations and constraint violation less
         than options.TolCon.
      4 Magnitude of step smaller than machine precision and constraint
         violation less than options.TolCon. This exit condition applies
         only to nonlinear constraints.
      5 Fitness limit reached and constraint violation less than
         options.TolCon.
      0 Maximum number of generations exceeded.
     -1 Optimization terminated by the output or plot function.
     -2 No feasible point found.
     -4 Stall time limit exceeded.
     -5 Time limit exceeded.

    [X,FVAL,EXITFLAG,OUTPUT] = GA(FITNESSFCN, ...) returns a
    structure OUTPUT with the following information:
              rngstate:
           generations:
             funccount:
         maxconstraint: , if any
               message:

    [X,FVAL,EXITFLAG,OUTPUT,POPULATION] = GA(FITNESSFCN, ...) returns the
    final POPULATION at termination.

    [X,FVAL,EXITFLAG,OUTPUT,POPULATION,SCORES] = GA(FITNESSFCN, ...) returns
    the SCORES of the final POPULATION.


    Example:
      Unconstrained minimization of 'rastriginsfcn' fitness function of
      numberOfVariables = 2
       x = ga(@rastriginsfcn,2)

      Display plotting functions while GA minimizes
       options = gaoptimset('PlotFcns',...
         {@gaplotbestf,@gaplotbestindiv,@gaplotexpectation,@gaplotstopping});
       [x,fval,exitflag,output] = ga(@rastriginsfcn,2,[],[],[],[],[],[],[],options)

    An example with inequality constraints and lower bounds
     A = [1 1; -1 2; 2 1];  b = [2; 2; 3];  lb = zeros(2,1);
     % Use mutation function which can handle constraints
     options = gaoptimset('MutationFcn',@mutationadaptfeasible);
     [x,fval,exitflag] = ga(@lincontest6,2,A,b,[],[],lb,[],[],options);

      FITNESSFCN can also be an anonymous function:
         x = ga(@(x) 3*sin(x(1))+exp(x(2)),2)

    If FITNESSFCN or NONLCON are parameterized, you can use anonymous
    functions to capture the problem-dependent parameters. Suppose you want
    to minimize the fitness given in the function myfit, subject to the
    nonlinear constraint myconstr, where these two functions are
    parameterized by their second argument a1 and a2, respectively. Here
    myfit and myconstr are M-file functions such as

         function f = myfit(x,a1)
         f = exp(x(1))*(4*x(1)^2 + 2*x(2)^2 + 4*x(1)*x(2) + 2*x(2) + a1);

    and

         function [c,ceq] = myconstr(x,a2)
         c = [1.5 + x(1)*x(2) - x(1) - x(2);
               -x(1)*x(2) - a2];
         % No nonlinear equality constraints:
          ceq = [];

    To optimize for specific values of a1 and a2, first assign the values
    to these two parameters. Then create two one-argument anonymous
    functions that capture the values of a1 and a2, and call myfit and
    myconstr with two arguments. Finally, pass these anonymous functions to
    GA:

      a1 = 1; a2 = 10; % define parameters first
      % Mutation function for constrained minimization
      options = gaoptimset('MutationFcn',@mutationadaptfeasible);
      x = ga(@(x)myfit(x,a1),2,[],[],[],[],[],[],@(x)myconstr(x,a2),options)

    See also gaoptimset, fitnessfunction, gaoutputfcntemplate, patternsearch, @.

    Reference page in Help browser
       doc ga

如果不让用现成的,你还是去matlab现写吧,也比转代码快
matlab/VB/python/c++/Java写程序请发QQ邮件:790404545@qq.com
3楼2012-06-07 19:41:09
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

亚star

新虫 (小有名气)

引用回帖:
3楼: Originally posted by libralibra at 2012-06-07 19:41:09
这是遗传算法吧,matlab有现成的
>> help ga
GA    Constrained optimization using genetic algorithm.
    GA attempts to solve problems of the form:
        min F(X)  subject to:  A*X  <= B ...

是用遗传算法来确定模糊TSK模型的,光遗传算法的比较好弄,但是和TSK模型结合的我就不会弄了~~
4楼2012-06-07 20:54:38
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

亚star

新虫 (小有名气)

引用回帖:
2楼: Originally posted by wu20811055 at 2012-06-07 18:07:40
不好译;但可以在matlab中调用就行了,(具体调用去网上找,一大堆)因为单独从程序上来说,简单转化是可以的,但是你的程序里面又调用了不少库函数,在matlab中对应起来相当困难,如果没有头文件什么的,转换倒不是 ...

调用的我也看了,说是要用什么MEX,我还是没搞明白~~
5楼2012-06-07 20:56:24
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

lijie169

铜虫 (著名写手)

【答案】应助回帖

感谢参与,应助指数 +1
引用回帖:
5楼: Originally posted by 亚star at 2012-06-07 20:56:24
调用的我也看了,说是要用什么MEX,我还是没搞明白~~...

这个你知道原理,自己可以写吧...没什么难的!c语言能写出来,matlab也能写出来
6楼2012-06-07 21:00:12
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

亚star

新虫 (小有名气)

引用回帖:
6楼: Originally posted by lijie169 at 2012-06-07 21:00:12
这个你知道原理,自己可以写吧...没什么难的!c语言能写出来,matlab也能写出来...

C语言的是我从网上下的~~~
7楼2012-06-07 21:06:57
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

lijie169

铜虫 (著名写手)

【答案】应助回帖

引用回帖:
7楼: Originally posted by 亚star at 2012-06-07 21:06:57
C语言的是我从网上下的~~~...

你自己不懂原理就直接用么?这样不好吧。像2楼说的,有可能还不用翻译,直接用matlab的代码呢
8楼2012-06-08 06:40:12
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

亚star

新虫 (小有名气)

引用回帖:
8楼: Originally posted by lijie169 at 2012-06-08 06:40:12
你自己不懂原理就直接用么?这样不好吧。像2楼说的,有可能还不用翻译,直接用matlab的代码呢...

原理我懂啊~~但这个不是单纯的遗传算法啊,要用模糊系统,最后还要实现迭代学习控制啊~~~这好多结合起来我就不知道该怎么弄了。
9楼2012-06-08 08:48:47
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

lijie169

铜虫 (著名写手)

【答案】应助回帖

三个过程叠加...应该还可以吧
10楼2012-06-08 09:38:44
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 亚star 的主题更新
信息提示
请填处理意见