package price;
import tool.*;
public class pro {
int s,datanumber;
String[] data=new String[5000];
double[] p=new double[5000];
double[] pr=new double[5000];
int number;
int[] point=new int[5000];
int[] op=new int[5000];
public static void main(String[] args) {
pro re=new pro();
}
pro(){
readfile sub2=new readfile();
sub2.makedata("data.csv","UTF-8");
data=sub2.data;
datanumber=sub2.datanumber;
for(s=2;s<datanumber+1;s++){
String[] x=data[s].split(",");
p[s-1]=num(x[2]);
}
int number=datanumber-1;
int sx;
for(s=13;s<datanumber;s++){
sx=s-12;
pr[sx]=(p[s]-p[s-12]);
}
number=datanumber-13;
int h;
System.out.println(number);
for(s=1;s<number+1;s++){
h=0;
if(pr[s]>1.99)h=h+1;
if(pr[s]>1.99)h=h+1;
if(h==2)point[s]=1;
h=0;
if(pr[s]<2)h=h+1;
if(pr[s]>0.99)h=h+1;
if(h==2)point[s]=2;
h=0;
if(pr[s]<1)h=h+1;
if(pr[s]>-0.01)h=h+1;
if(h==2)point[s]=3;
h=0;
if(pr[s]<0)h=h+1;
if(pr[s]>-1.01)h=h+1;
if(h==2)point[s]=4;
h=0;
if(pr[s]<-1)h=h+1;
if(pr[s]>-2.01)h=h+1;
if(h==2)point[s]=5;
h=0;
if(pr[s]<-2)h=h+1;
if(pr[s]<-2)h=h+1;
if(h==2)point[s]=6;
}
double[][] px=new double[7][7];
double[][] qx=new double[7][7];
for(s=1;s<7;s++){
for(sx=1;sx<7;sx++){
px[s][sx]=0.05;
qx[s][sx]=0.05;
}}
for(s=1;s<7;s++){
px[s][s]=0.75;
qx[s][s]=0.75;
}
int tr;
for(tr=1;tr<11;tr++){
optimal sub7=new optimal();
sub7.px=px;
sub7.qx=qx;
sub7.point=point;
sub7.number=number;
sub7.makedata();
px=sub7.px;
qx=sub7.qx;
op=sub7.op;
}
for(s=1;s<number+1;s++){
if(op[s]==1) System.out.println(s+","+2.5+","+pr[s]);
if(op[s]==2) System.out.println(s+","+1.5+","+pr[s]);
if(op[s]==3) System.out.println(s+","+0.5+","+pr[s]);
if(op[s]==4) System.out.println(s+","+-0.5+","+pr[s]);
if(op[s]==5) System.out.println(s+","+-1.5+","+pr[s]);
if(op[s]==6) System.out.println(s+","+-2.5+","+pr[s]);
}
}
double num(String str){
double nx;
nx=0;
try{
nx=Double.parseDouble(str);
}catch (Exception e) {}
return nx;
}
}
package price;
public class optimal {
int[] point=new int[600];
int[] op=new int[600];
int number;
double[][] v=new double[600][7];
double[][] px=new double[7][7];
double[][] qx=new double[7][7];
double[][] ps=new double[7][7];
double[][] qs=new double[7][7];
int[][] gotox=new int[600][7];
void makedata(){
int s,sx;
for(s=1;s<7;s++){
sx=point[s];
v[1][s]=px[s][sx];
}
int tx;
for(s=2;s<number+1;s++){
for(sx=1;sx<7;sx++){
int n=point[s];
double u1=px[sx][n];
double maxv=0;
int sxs=0;
for(tx=1;tx<7;tx++){
double v1=u1*qx[tx][sx]*v[s-1][tx];
if(v1>maxv)sxs=tx;
if(v1>maxv)maxv=v1;
}
v[s][sx]=maxv;
gotox[s][sx]=sxs;
}
}
double maxvv=0;
sx=0;
for(s=1;s<7;s++){
if(v[number][s]>maxvv)sx=s;
if(v[number][s]>maxvv)maxvv=v[number][s];
}
op[number]=sx;
for(s=0;s<number-1;s++){
sx=op[number-s];
op[number-s-1]=gotox[number-s][sx];
}
int s1,s2;
for(s1=1;s1<7;s1++){
for(s2=1;s2<7;s2++){
int c1,c2;
c1=0;
c2=0;
for(s=1;s<number+1;s++){
int h=0;
if(op[s]==s1)h=h+1;
if(point[s]==s2)h=h+1;
if(h==2)c2=c2+1;
if(op[s]==s1)c1=c1+1;
}
ps[s1][s2]=0;
if(c1>0)ps[s1][s2]=(double)c2/c1;
}
}
for(s1=1;s1<7;s1++){
for(s2=1;s2<7;s2++){
int c1,c2;
c1=0;
c2=0;
for(s=1;s<number;s++){
int h=0;
if(op[s]==s1)h=h+1;
if(op[s+1]==s2)h=h+1;
if(h==2)c2=c2+1;
if(op[s]==s1)c1=c1+1;
}
qs[s1][s2]=0;
if(c1>0)qs[s1][s2]=(double)c2/c1;
}
}
for(s1=1;s1<7;s1++){
for(s2=1;s2<7;s2++){
px[s1][s2]=0.01;
if(ps[s1][s2]>0.01)px[s1][s2]=ps[s1][s2];
}}
for(s1=1;s1<7;s1++){
for(s2=1;s2<7;s2++){
qx[s1][s2]=0.01;
if(qs[s1][s2]>0.01)qx[s1][s2]=qs[s1][s2];
}}
}
}
最終更新:2016年05月10日 14:17