原本的程式預設是找最小值,程式碼如下(PBmain.java)
//判定改變pgbest
void check(double now_answer, double pbest_answer, double gbest_answer, int now_bird, int bird_var_num, double[][] bird_x, double[] bird_temp_now, double[][] pbest, double[] bird_temp_pbest, double[] gbest, double[] bird_temp_gbest) {
int i = now_bird, j;
//結果較好就轉存pbest
if ( now_answer< pbest_answer ) {
for (j=0; j< bird_var_num; j++ ) {
//維度變化
pbest[i][j] = bird_temp_now[j];
} //end for
//結果較好就轉存gbest
if ( now_answer< gbest_answer ) {
for (j=0; j< bird_var_num; j++ ) gbest[j] = bird_temp_now[j];
} //end if
} end if
} //end check()
將小於符號改成>大於符號應該就是找最大值了
此外,該PSO演算法程式可以自訂問題q1v2.txt,問題的定義如下
//問題定義開始 user_function
package myPackage.javaclass;public class user_function{
public static int v=2; //變數的個數
public static int v=2; //變數的個數
//function 開始
public double function(double[] x){
//z為目標值
double z = 35*x[0]+25*x[1];
double z = 35*x[0]+25*x[1];
//輸入限制式,符合限制式條件者才傳會目標值z,否則傳回一個大值
if ((0.32*x[0] + 0.22*x[1] >= 8) & (0.11*x[0] + 0.09*x[1] >= 3) & (0.15*x[0]+0.10*x[1] >= 4))
{
return z;
}else
{
z = 1.79769E+308;
return z;
}// end of if else
}// end of public double function 問題定義結束
}//end of user_function
if ((0.32*x[0] + 0.22*x[1] >= 8) & (0.11*x[0] + 0.09*x[1] >= 3) & (0.15*x[0]+0.10*x[1] >= 4))
{
return z;
}else
{
z = 1.79769E+308;
return z;
}// end of if else
}// end of public double function 問題定義結束
}//end of user_function
沒有留言:
張貼留言