アットウィキロゴ

線形LL[]

class linear{

int s;
double th[]=new double[101];
double x[]=new double[101];
double p[]=new double[101];
double px1,px0;
double cost;

void makedata(int num){

sol(num);

for(s=1;s<101;s++){
x[s]=d(th[s],px0,px1);
if(x[s]>0)p[s]=px1*x[s]+px0;
}

}

int count(double p0,double p1){
int s,c1;
c1=0;
for(s=1;s<101;s++){
if(d(th[s],p0,p1)>0)c1=c1+1;
}
return c1;
}
void sol(int num){
int m,n,h;
double maxv,p0,p1;
maxv=0;
px0=0;
px1=0;
for (m=0;m<1000;m++){
for (n=1;n<100;n++){
p0=m;
p1=n;
h=0;
if (rev(th,p0,p1,cost)>maxv)h=h+1;
if (count(p0,p1)==num)h=h+1;
if (h==2)px1=p1;
if (h==2)px0=p0;
if (h==2)maxv=rev(th,p0,p1,cost);
}
}

}


double rev(double[] th,double p0,double p1,double cost){
double x1,r1,sumrev;
int s;
sumrev=0;
for(s=1;s<101;s++){
x1=d(th[s],p0,p1);
r1=(p1-cost)*x1+p0;
if(x1==0)r1=0;
sumrev=sumrev+r1;
}
return sumrev;
}


double d(double th1,double p0,double p1){
double x1,u1;
x1=th1-p1;
if(x1<0)x1=0;
u1=u(th1,x1)-p1*x1-p0;
if(u1<0)x1=0;
return x1;
}

double u(double th1,double x){
double u1;
u1=th1*x-0.5*x*x;
return u1;
}







}
最終更新:2011年07月23日 13:28