package kan;
import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import tool.*;
public class pro {
int s,datanumber;
String[] data=new String[500000];
int[] d=new int[50];
int[] y=new int[50];
double[] delta=new double[500];
int number;
double[] c=new double[30];
int[] sample_y=new int[101];
int[] sample_d=new int[101];
double sigma,sig_y,sig_d;
int y1,d1;
public static void main(String[] args) {
pro t=new pro();
}
pro(){
readx("data.csv");
for(s=1;s<datanumber+1;s++){
String[] x=data[s].split(",");
y[s-1]=numx(x[1]);
d[s-1]=numx(x[2]);
delta[s-1]=num(x[3]);
}
number=datanumber-1;
System.out.println(number);
for(s=1;s<21;s++){
c[s]=50*s-25;
}
c[21]=1200;
int s;
for(s=1;s<101;s++){
sample_y[s]=rand_y();
sample_d[s]=rand_d();
}
point();
System.out.println(sigma);
int n;
for(n=1;n<6;n++){
int tr;
for(tr=1;tr<1001;tr++){
y1=rand_y();
d1=rand_d();
int mx;
double mins=99999;
int mxs=1;
for(mx=1;mx<101;mx++){
if(rep(mx)<mins)mxs=mx;
if(rep(mx)<mins)mins=rep(mx);
}
sample_y[mxs]=y1;
sample_d[mxs]=d1;
}
point();
System.out.println(sigma);
}
for(s=1;s<101;s++){
System.out.println(sample_y[s]+","+sample_d[s]);
}
}
double rep(int mx){
int s;
int[] y2=new int[101];
int[] d2=new int[101];
for(s=1;s<101;s++){
y2[s]=sample_y[s];
d2[s]=sample_d[s];
}
y2[mx]=y1;
d2[mx]=d1;
int sx;
int n1;
double[] k=new double[31];
double d1;
for(s=1;s<22;s++){
d1=0;
n1=0;
for(sx=1;sx<101;sx++){
int sp=d2[sx];
if(y2[sx]==s)d1=d1+c[sp];
if(y2[sx]==s)n1=n1+1;
}
k[s]=0;
if(n1>0)k[s]=(double)(d1/n1);
}
double sig=0;
for(s=1;s<22;s++){
if(k[s]>0)sig=sig+(k[s]-delta[s])*(k[s]-delta[s]);
}
double z=0;
for(s=1;s<22;s++){
n1=0;
for(sx=1;sx<101;sx++){
if(y2[sx]==s)n1=n1+1;
}
z=z+(n1-y2[s])*(n1-y2[s]);
}
double sy=z;
z=0;
for(s=1;s<22;s++){
n1=0;
for(sx=1;sx<101;sx++){
if(d2[sx]==s)n1=n1+1;
}
z=z+(n1-d[s])*(n1-d[s]);
}
double sd=z;
return sig/sigma+sy/sig_y+sd/sig_d;
}
void point(){
int s,sx;
int n1;
double[] k=new double[101];
double d1;
for(s=1;s<22;s++){
d1=0;
n1=0;
for(sx=1;sx<101;sx++){
int sp=sample_d[sx];
if(sample_y[sx]==s)d1=d1+c[sp];
if(sample_y[sx]==s)n1=n1+1;
}
k[s]=0;
if(n1>0)k[s]=(double)(d1/n1);
}
double sig=0;
for(s=1;s<22;s++){
if(k[s]>0)sig=sig+(k[s]-delta[s])*(k[s]-delta[s]);
}
sigma=sig;
double z=0;
for(s=1;s<22;s++){
n1=0;
for(sx=1;sx<101;sx++){
if(sample_y[sx]==s)n1=n1+1;
}
z=z+(n1-y[s])*(n1-y[s]);
}
sig_y=z;
z=0;
for(s=1;s<22;s++){
n1=0;
for(sx=1;sx<101;sx++){
if(sample_d[sx]==s)n1=n1+1;
}
z=z+(n1-d[s])*(n1-d[s]);
}
sig_d=z;
}
int rand_d(){
double m=5012*Math.random();
int[] q=new int[22];
int s;
q[0]=0;
for(s=1;s<22;s++){
q[s]=q[s-1]+d[s];
}
int n=1;
for(s=1;s<21;s++){
if(m>q[s])n=n+1;
}
return n;
}
int rand_y(){
double m=5012*Math.random();
int[] q=new int[51];
int s;
q[0]=0;
for(s=1;s<22;s++){
q[s]=q[s-1]+y[s];
}
int n=1;
for(s=1;s<21;s++){
if(m>q[s])n=n+1;
}
return n;
}
int numx(String str){
int nx;
nx=0;
try{
nx=Integer.parseInt(str);
}catch (Exception e) {}
return nx;
}
double num(String str){
double nx;
nx=0;
try{
nx=Double.parseDouble(str);
}catch (Exception e) {}
return nx;
}
void readx(String file){
String str;
BufferedReader br;
int s;
s=0;
try {
br = new BufferedReader(new InputStreamReader(new FileInputStream(file),"SJIS"));
while((str = br.readLine()) != null) {
s=s+1;
data[s]=str;
}
br.close();
} catch (IOException e) {System.out.println(e);}
datanumber=s;
}
}
最終更新:2015年09月15日 14:40