java实现Pareto Optimal算法
//根据对Pareto Optimal算法的理解,用java实现的源代码,贴出来跟大家分享一下//源代码经测试都是已经可以运行的
public class PO {
public void PO_test(double[][] B){
double A[][]= new double.length]; //初始的时候将输出矩阵A设为空
for(int i=0;i<B.length;i++){
for(int j=0;j<B.length;j++)
A=0;
}
double cc[][] = new double.length]; //下面for循环中利用cc存放每次的满足PO的每一行
for(int i=0;i<B.length;i++){
for(int j=0;j<B.length;j++)
cc=0;
}
int sz1 = B.length;//sz1=size(B,1);取矩阵B的第一列的个数 为8
int jj=0; //jj为b Vector的下标,初始为0
int kk[] = new int;//kk(8)={0,0,0,0,0,0,0,0}
for(int i=0;i<sz1;i++){
kk=0;
}
double c[][] = new double.length];
for(int i=0;i<sz1;i++){
for(int j=0;j<B.length;j++)
c=0;
}
//bb=c;//把矩阵c赋给临时变量bb
double bb[][] = new double.length];
for(int i=0;i<sz1;i++){
for(int j=0;j<B.length;j++)
bb=c;
}
for(int k=0;k<sz1;k++){ //for k=1:sz1 //k从1到8行
int j=0;
//将第k行的元素放进临时变量ak中
double ak[] = new double.length];
for(int m=0;m<B.length;m++){
ak=B;
}
//这个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.length;n++){//bb(j,:)=ak-B(i,:);
bb=ak-B;
}
}
}
//将bb转置
double bbt[][] = new double.length];
for(int p=0;p<bb.length;p++)
for(int q=0;q<bb.length;q++){
bbt=bb;
}
//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.length;q++){
if(bbt<0){
s++;
break;
}
}
}
if(s>6){
jj=jj+1;
//System.out.println("jj="+jj);
kk=k;
for(int m=0;m<ak.length;m++){
cc=ak;
}
}
/**//此时的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.length;q++)
{
A=cc;
System.out.print(A+"");
}
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+"");
}
}
}
//测试用例
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);
}
}
页:
[1]