アットウィキロゴ

最適非線形所得税の準備

package optimal;
 
 
public class pro {
 
 double[][][] u=new double[101][21][21];
 double[][][] w=new double[101][21][21];
 double[][][][] v=new double[101][21][21][101];
  int[][][][] gotom=new int[101][21][21][101];
   int[][][][] goton=new int[101][21][21][101];
    int[][][][] gotob=new int[101][21][21][101];
 
    int[] c=new int[101];
 int[] y=new int[101];
 int[] th=new int[101];
 
   int[] opc=new int[101];
 int[] opy=new int[101];
 
 int[][] endm=new int[21][21];
   int[][] endn=new int[21][21];
    int[][] endb=new int[21][21];
 
 double h;   
 int s,m,n,b,bx;
 int c1,y1;
 
 
    public static void main(String[] args) {
      pro test=new pro();
    }
 
pro(){    
 
    for(s=1;s<101;s++){
    th[s]=10*s;
    }
 
    h=0.01;
 
    for(s=1;s<101;s++){
     for(m=-10;m<11;m++){
        for(n=-10;n<11;n++){
         c1=c[s]+m;
    y1=y[s]+n;
 u[s][m+10][n+10]=ux(s,c1,y1);   
        }
     }
    }
 
    for(s=1;s<100;s++){
     for(m=-10;m<11;m++){
        for(n=-10;n<11;n++){
         c1=c[s]+m;
    y1=y[s]+n;
 w[s][m+10][n+10]=ux(s+1,c1,y1);   
        }
     }
    }
 
    s=1;
    for(m=-10;m<11;m++){
        for(n=-10;n<11;n++){
         for(b=-50;b<51;b++){
 v[s][m+10][n+10][b+50]=-999;   
        }
     }
    }
 
     s=1;
    for(m=-10;m<11;m++){
    for(n=-10;n<11;n++){
     b=n-m;
 v[s][m+10][n+10][b+50]=u[s][m+10][n+10];   
    }
     }
 
    double u1,maxv,v1,w1;
    int z,mx,nx,mxs,nxs,bxs;
 
    for(s=2;s<10;s++){
    for(m=-10;m<11;m++){
    for(n=-10;n<11;n++){
    for(b=-50;b<51;b++){
    u1=u[s][m+10][n+10];
    bx=b-n+m;
    z=0;
    if(bx<-50)z=100;
    if(bx>50)z=100;
    if(z>50)bx=0;
    maxv=-999;
    mxs=0;
    nxs=0;
    bxs=0;
    for(mx=-10;mx<11;mx++){
    for(nx=-10;nx<11;nx++){
    v1=u1+v[s-1][mx+10][nx+10][bx+50];
    w1=w[s-1][mx+10][nx+10];
    if(w1>u1)v1=-999;
    if(z>50)v1=-999;
     if(v1>maxv)mxs=mx;
      if(v1>maxv)nxs=nx;
       if(v1>maxv)bxs=bx;
    if(v1>maxv)maxv=v1;
    }
    }
    v[s][m+10][n+10][b+50]=maxv;
    gotom[s][m+10][n+10][b+50]=mxs;  
    goton[s][m+10][n+10][b+50]=nxs; 
    gotob[s][m+10][n+10][b+50]=bxs; 
    }
    }
    }
    }
 
    double supv;
    int ms,ns,bs;
 
 
    s=100;
    supv=-999;
    ms=0;
    ns=0;
    for(m=-10;m<11;m++){
    for(n=-10;n<11;n++){
    u1=u[s][m+10][n+10];
    bx=m-n;
    maxv=-999;
    mxs=0;
    nxs=0;
    bxs=0;
    for(mx=-10;mx<11;mx++){
    for(nx=-10;nx<11;nx++){
    v1=u1+v[s-1][mx+10][nx+10][bx+50];
    w1=w[s-1][mx+10][nx+10];
    if(w1>u1)v1=-999;
    if(v1>maxv)mxs=mx;
    if(v1>maxv)nxs=nx;
    if(v1>maxv)bxs=bx;
    if(v1>maxv)maxv=v1;
    }
    }
    endm[m+10][n+10]=mxs;
    endn[m+10][n+10]=nxs;
    endb[m+10][n+10]=bxs;
    if(maxv>supv)ms=m;
    if(maxv>supv)ns=n;
    if(maxv>supv)supv=maxv;    
    }
    }
 
 
    System.out.println(ms);
    System.out.println(ns);
 
    opc[100]=ms;
    opy[100]=ns;
 
    bs=ms-ns;
 
    mxs=endm[ms+10][ns+10];
    nxs=endn[ms+10][ns+10];
 
    opc[99]=mxs;
    opy[99]=nxs;     
 
    int t;
 
    for(t=1;t<99;t++){
    ms=opc[100-t];
    ns=opy[100-t];
opc[99-t]=gotom[100-t][ms+10][ns+10][bs+50];
opy[99-t]=goton[100-t][ms+10][ns+10][bs+50];
    bs=bs-opc[99-t]+opy[99-t];
    }
 
    for(s=1;s<101;s++){
    c[s]=c[s]+opc[s];
     y[s]=y[s]+opy[s];
    }
 
 
 
 
 
 
 
 
 
 
 
 
 
}
double ux(int s,int c1,int y1){
double c2,x2,u1;
int z;
c2=c1*h;
x2=1-(double)y1/th[s];
z=0;
if(c2<0)z=100;
if(x2<0)z=100;
if(x2>1)z=100;
u1=-999;
if(z<50)u1=Math.log(c2)+Math.log(x2);
return u1;
 
}
}
 
最終更新:2013年09月24日 01:10