❶ 你好,我想問下怎麼根據我設計的目標函數和約束條件在matlab中編寫遺傳演算法的程序
給你一個例子,說明如何用ge()函數求解帶有約束條件的目標函數問題。
1、首先建立帶有約束條件的目標函數
function f =ga_fun0(x)
if (1.5+x(1)*x(2)-x(1)-x(2)>0 | -x(1)*x(2)>10)
f=100;
else
f=exp(x(1))*(4*x(1)^2+2*x(2)^2+4*x(1)*x(2)+2*x(2)+1);
end
end
2、在命令窗口中執行下列命令
>>[x,fval] = ga(@ga_fun0,2)
運行結果
如還有問題,請將問題貼出來,幫你解決。
❷ 鎺掑簭綆楁硶鐨勮捐★紙c璇璦錛夋牴鎹紼嬪簭鐢繪祦紼嬪浘鍙婂規瘡鍙ョ▼搴忓姞娉ㄩ噴
#include "stdio.h"//鏍囧噯io澶存枃浠
#include "stdlib.h"//搴撴枃浠
#include "time.h"//鏃墮棿緋誨ご鏂囦歡
#define N0 100000 //瀹氫箟甯擱噺
typedef int keytype; //綾誨瀷鍛藉悕
typedef struct node //瀹氫箟緇撴瀯浣
{ keytype key; //鍙鏄綾誨瀷鍛藉悕鎴恔eytype錛屽叾瀹炲氨鏄痠nt鐨
}Etp;//緇撴瀯浣撶被鍨嬪彨鍋欵tp
Etp R[N0+1]; // R[1]..R[n] //瀹氫箟鏁扮粍
int n=50, count;//鍏ㄥ矓鍙橀噺
void readData( Etp R[], int n)//璇繪暟鎹鐨勫嚱鏁
{ int i;
count=0;
srand( time( NULL ));//鍒濆嬪寲鏃墮棿縐嶅瓙
for( i=1; i<=n; i++) //瀵規暟緇勫垵濮嬪寲
R[i].key=1000+
(int)((9999.0-1000)*rand()/RAND_MAX); // 0..RAND_MAX
}
void printData( Etp R[], int n )//鎵撳嵃鏄劇ず鏁版嵁鐨勫嚱鏁
{ int i;
for( i=1; i<=n; i++)
printf("%8d%s", //鏍煎紡鍖栨樉紺烘暟緇勭殑鏁版嵁
R[i].key, i%5==0?"\n":"");
printf("\ncount=%d\n", count);
}
void bubberSort( Etp R[], int n )//鍐掓場鎺掑簭鐨勫嚱鏁
{ int i,j;//錛堣繖涓鍑芥暟鍧楀氨鏄鍐掓場鎺掑簭鐨勭畻娉曠▼搴忥級
bool swap;
for( i=1; i<=n-1; i++)
{ swap=false;
for( j=1; j<=n-i; j++)
if( count++,R[j].key>R[j+1].key )
{ R[0]=R[j];
R[j]=R[j+1];
R[j+1]=R[0];
swap=true;
}
if( !swap ) break;
}
}
void bubberSort1( Etp R[], int n )//榪欎釜涔熸槸鍙︿竴涓鍐掓場鎺掑簭鐨勫嚱鏁
{ int j;//璺熶笂闈涓嶅悓鐨勬槸榪欎釜綆楁硶鐢ㄧ殑鏄閫掑綊鐨勬柟寮忥紝涓婇潰鐨勬槸闈為掑綊鐨
for( j=1; j<=n-1; j++)
if( count++,R[j].key>R[j+1].key )
{ R[0]=R[j];
R[j]=R[j+1];//________;//灝辨槸涓や釜鍙橀噺浜ゆ崲鍊
R[j+1]=R[0];
}
if( n>1 ) bubberSort1( R, n-1); //___________;//閫掑綊璋冪敤
}
void selectSort( Etp R[], int n )//榪欎釜鏄閫夋嫨鎺掑簭
{ int i,j,k;//錛堣繖涓鍑芥暟鍧楀氨鏄閫夋嫨鎺掑簭鐨勭畻娉曠▼搴忥級
for( i=1; i<=n-1; i++)
{
k=i;
for( j=i+1; j<=n; j++)
if( count++,R[j].key<R[k].key ) k=j;
if( k!=i )
{ R[0]=R[i];
R[i]=R[k];
R[k]=R[0];
}
}
}
void insertSort( Etp R[], int n )//榪欎釜鏄鎻掑叆鎺掑簭
{ int i,j;
for( i=2; i<=n; i++)
{
R[0]=R[i];
j=i-1;
while( count++,R[j].key>R[0].key ) R[j+1]=R[j--];
R[j+1]=R[0];
count++;
}
}
void sift( Etp R[], int i, int m)//鍫嗘帓搴忎腑鐨勬ラ
{ int k=2*i;
R[0]=R[i];
while( k<=m )
{ if( count++, k+1<=m && R[k+1].key>R[k].key) k++;
if( count++,R[0].key<R[k].key ) R[i]=R[k];
else break;
i=k;
k=2*i;
}
R[i]=R[0];
}
void heapSort( Etp R[], int n )//榪欎釜鏄鍫嗘帓搴
{ int j;
for( j=n/2; j>=1; j--) sift( R, j, n);
for( j=n; j>=2; j--)
{ R[0]=R[1];
R[1]=R[j];
R[j]=R[0];
sift( R, 1, j-1 );
}
}
int main()//涓誨嚱鏁扮殑榪涘叆鍙
{
readData( R, n );//璇誨彇鏁版嵁
bubberSort1( R, n );//璋冪敤閫掑綊鍐掓場鎺掑簭
printData( R, n);//鏄劇ず鏁版嵁
readData( R, n );//璇誨彇鏁版嵁
selectSort( R, n );//璋冪敤閫夋嫨鎺掑簭
printData( R, n);//鏄劇ず鏁版嵁
readData( R, n );//璇誨彇鏁版嵁
insertSort( R, n );//璋冪敤鎻掑叆鎺掑簭
printData( R, n);//鏄劇ず鏁版嵁
readData( R, n );//璇誨彇鏁版嵁
heapSort( R, n );//璋冪敤鍫嗘帓搴
printData( R, n);//鏄劇ず鏁版嵁
return 0;
}
//璇堵穨娉ㄩ噴瀹屾垜鎬葷畻鐪嬪嚭鏉ヤ簡錛岄毦閬撲綘瑕佹垜瑙i噴鍚勪釜鎺掑簭鐨勮繃紼嬶紵
//閭d綘榪樹笉濡傜洿鎺鎴栬呯湅涔︼紝浣犺佹槸涓嶇悊瑙e師鐞嗘槸涓嶅彲鑳界湅鎳傝繃紼嬬殑銆
//娉ㄩ噴涔熷彧鏄璇鍙ョ殑瑙i噴錛屼絾鏄榪囩▼鐨勫惈涔夋槸鏃犳硶鎻忚堪鐨