`

java实现Pareto Optimal算法

阅读更多
//根据对Pareto Optimal算法的理解,用java实现的源代码,贴出来跟大家分享一下
//源代码经测试都是已经可以运行的

public class PO {


public void PO_test(double[][] B){

    double A[][]  = new double[B.length][B[0].length]; //初始的时候将输出矩阵A设为空
    for(int i=0;i<B.length;i++){
    for(int j=0;j<B[i].length;j++)
    A[i][j]=0;
    }
    double cc[][] = new double[B.length][B[0].length]; //下面for循环中利用cc存放每次的满足PO的每一行
    for(int i=0;i<B.length;i++){
    for(int j=0;j<B[i].length;j++)
    cc[i][j]=0;
    }
int sz1 = B.length;//sz1=size(B,1); 取矩阵B的第一列的个数 为8


int jj=0; //jj为b Vector的下标,初始为0
int kk[] = new int[B.length];//kk(8)={0,0,0,0,0,0,0,0}
for(int i=0;i<sz1;i++){
kk[i]=0;
}

double c[][] = new double[B.length][B[0].length]; 
for(int i=0;i<sz1;i++){
    for(int j=0;j<B[i].length;j++)
    c[i][j]=0;
    }

//bb=c;//把矩阵c赋给临时变量bb
double bb[][] = new double[B.length][B[0].length];
for(int i=0;i<sz1;i++){
    for(int j=0;j<B[i].length;j++)
    bb[i][j]=c[i][j];
    }

for(int k=0;k<sz1;k++){ //for k=1:sz1 //k从1到8行

int j=0;
//将第k行的元素放进临时变量ak中
double ak[] = new double[B[0].length];
for(int m=0;m<B[k].length;m++){
ak[m]=B[k][m];
}
//这个for循环主要对1到8行中, 用第k行-第i行的值存入临时的bb的第j行中,j自增1
  for(int i=0;i<sz1;i++){
  if( i!=k){
      j=j+1;
      for(int n=0;n<B[i].length;n++){//  bb(j,:)=ak-B(i,:);
      bb[j-1][n]=ak[n]-B[i][n];
      }
  }
}
  //将bb转置
  double bbt[][] = new double[B[0].length][B.length];
for(int p=0;p<bb.length;p++)
for(int q=0;q<bb[0].length;q++){
    bbt[q][p]=bb[p][q];
    }
//testing
//System.out.println("bb.length="+bb.length);
int s=0;
for(int p=0;p<bb.length-1;p++){
for(int q=0;q<bb[0].length;q++){
if(bbt[q][p]<0){
s++;
break;
}
}
}
if(s>6){
jj=jj+1;
//System.out.println("jj="+jj);
kk[jj-1]=k;
for(int m=0;m<ak.length;m++){
cc[jj-1][m]=ak[m];
}
}
/**   //此时的j=8,对于当前的bb矩阵的1-8行进行转置,如果任意一一列存在小于0的元素,那么将这行元素放入c中,并且记录行号放入kk中
  
**/
}
if(jj>0){
//如果jj不等于0,那么说明c矩阵和kk数组中都有元素存在
System.out.println("OutPut Matrix A:");
for(int p=0;p<jj;p++)
{
for(int q=0;q<cc[0].length;q++)
{
A[p][q]=cc[p][q];

System.out.print(A[p][q]+"  ");
}
System.out.println();
}

}else{
System.out.println("There are no Pareto points. The result is an empty matrix.");
}
System.out.println("The total number of PO points is:"+jj);
System.out.println("Pareto Optimal points:");
for(int i=0;i<jj;i++){
System.out.print(kk[i]+"  ");
}

}


}



//测试用例

public class Run_main {

/**
* @param args
*/
public static void main(String[] args) {
PO po = new PO();
double B[][]={{0 ,-1 ,-2},{1 ,-2 ,-3},{-3, 2, 1},{4 ,0, -2},{2,-2 ,1},{1 ,-1, 2},{2, -1, 1},{0, -2 ,2}};
po.PO_test(B);
}

}







分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics