遺傳演算法函數優化
Ⅰ 本人剛學MATLAB遺傳演算法工具箱,請大家幫我看一下這個簡單一元函數優化錯誤的原因及怎樣修改。
由於有代溝,所以plot中的variable是36*20的,而I對應的ObjV是40*1的,所以I可能取40個值,但variable只有36行,所以出錯。在「gen=gen+1;%代計數器增加」後加variable=bs2rv(Chrom,FieldD),你調試一下試試。
Ⅱ 無目標函數的優化可以用遺傳演算法嗎
很顯然,f 才是目標函數值,而F只是適應度函數值,用來評價個體優劣的。 加上罰函數,僅僅是為了懲罰那些不滿足約束條件的個體,以此來解決約束優化問題。 但真正的目標函數是f,目的是f的值越小越好。
Ⅲ 我想用遺傳演算法來解決一個函數的優化問題。就是函數形式已知,涉及多個自變數,一個因變數,但是函數的參數
對於一般的函數,可以利用Matlab自帶的GA optimaltool來解決,裡面有詳細的實例,看Matlab幫助文件。命令: optimtool('ga')
Ⅳ MATLAB 遺傳演算法解決函數優化,大神發個程序借鑒下
留個郵箱 發給你
Ⅳ 遺傳演算法的目標函數與優化參數無關也能得出最優參數嗎
和目標函數沒有關系,是在實驗中找到的。
Ⅵ 懂罰函數的請進,有約束優化遺傳演算法的目標函數問題
很顯然,f 才是目標函數值,而F只是適應度函數值,用來評價個體優劣的。
加上罰函數,僅僅是為了懲罰那些不滿足約束條件的個體,以此來解決約束優化問題。
但真正的目標函數是f,目的是f的值越小越好。
Ⅶ 遺傳演算法的優缺點
優點:
1、遺傳演算法是以決策變數的編碼作為運算對象,可以直接對集合、序列、矩陣、樹、圖等結構對象進行操作。這樣的方式一方面有助於模擬生物的基因、染色體和遺傳進化的過程,方便遺傳操作運算元的運用。
另一方面也使得遺傳演算法具有廣泛的應用領域,如函數優化、生產調度、自動控制、圖像處理、機器學習、數據挖掘等領域。
2、遺傳演算法直接以目標函數值作為搜索信息。它僅僅使用適應度函數值來度量個體的優良程度,不涉及目標函數值求導求微分的過程。因為在現實中很多目標函數是很難求導的,甚至是不存在導數的,所以這一點也使得遺傳演算法顯示出高度的優越性。
3、遺傳演算法具有群體搜索的特性。它的搜索過程是從一個具有多個個體的初始群體P(0)開始的,一方面可以有效地避免搜索一些不必搜索的點。
另一方面由於傳統的單點搜索方法在對多峰分布的搜索空間進行搜索時很容易陷入局部某個單峰的極值點,而遺傳演算法的群體搜索特性卻可以避免這樣的問題,因而可以體現出遺傳演算法的並行化和較好的全局搜索性。
4、遺傳演算法基於概率規則,而不是確定性規則。這使得搜索更為靈活,參數對其搜索效果的影響也盡可能的小。
5、遺傳演算法具有可擴展性,易於與其他技術混合使用。以上幾點便是遺傳演算法作為優化演算法所具備的優點。
缺點:
1、遺傳演算法在進行編碼時容易出現不規范不準確的問題。
2、由於單一的遺傳演算法編碼不能全面將優化問題的約束表示出來,因此需要考慮對不可行解採用閾值,進而增加了工作量和求解時間。
3、遺傳演算法效率通常低於其他傳統的優化方法。
4、遺傳演算法容易出現過早收斂的問題。
(7)遺傳演算法函數優化擴展閱讀
遺傳演算法的機理相對復雜,在Matlab中已經由封裝好的工具箱命令,通過調用就能夠十分方便的使用遺傳演算法。
函數ga:[x, fval,reason]= ga(@fitnessfun, nvars, options)x是最優解,fval是最優值,@fitnessness是目標函數,nvars是自變數個數,options是其他屬性設置。系統默認求最小值,所以在求最大值時應在寫函數文檔時加負號。
為了設置options,需要用到下面這個函數:options=gaoptimset('PropertyName1', 'PropertyValue1', 'PropertyName2', 'PropertyValue2','PropertyName3', 'PropertyValue3', ...)通過這個函數就能夠實現對部分遺傳演算法的參數的設置。
Ⅷ 各位誰擅長遺傳演算法呀,我這有個函數得用遺傳演算法編一下,進行最優化求解的過程,最好是用Matlab。
% 主程序
%遺傳演算法主程序
%Name:genmain.m
%author:楊冪
clear
clf
%%初始化
popsize=50; %群體大小
chromlength=30; %字元串長度(個體長度)
pc=0.6; %交叉概率
pm=0.1; %變異概率
pop=initpop(popsize,chromlength); %隨機產生初始群體
%%開始迭代
for i=1:20 %20為迭代次數
[objvalue]=calobjvalue(pop); %計算目標函數
fitvalue=calfitvalue(objvalue); %計算群體中每個個體的適應度
[newpop]=selection(pop,fitvalue); %復制
[newpop]=crossover(pop,pc); %交叉
[newpop]=mutation(pop,pm); %變異
[bestindivial,bestfit]=best(pop,fitvalue); %求出群體中適應值最大的個體及其適應值
y(i)=max(bestfit);%儲存最優個體適應值
n(i)=i;
pop5=bestindivial;%儲存最優個體
%解碼
x1(i)=decodechrom(pop5,1,chromlength/2)*2/32767;
x2(i)=10+decodechrom(pop5,chromlength/2+1,chromlength/2)*10/32767;
pop=newpop;%將新產生的種群作為當前種群
end
%%繪圖
figure(1)%最優點變化趨勢圖
i=1:20;
plot(y(i),'-r*')
xlabel('迭代次數');
ylabel('最優個體適應值');
title('最優點變化趨勢');
legend('最優點');
grid on
figure(2)%最優點分布圖
[X1,X2]=meshgrid(0:0.1:2,10:0.1:20);
Z=X1.^2+X2.^2;
mesh(X1,X2,Z);
xlabel('自變數x1'),ylabel('自變數x2'),zlabel('函數值f(x1,x2)');
hold on
plot3(x1,x2,y,'ro','MarkerEdgeColor','r','MarkerFaceColor','r','MarkerSize',5)
title('最優點分布');
legend('最優點');
hold off
[z index]=max(y); %計算最大值及其位置
x5=[x1(index),x2(index)]%計算最大值對應的x值
z
Ⅸ 基於Matlab的函數優化遺傳演算法程序
新建一個函數
_f.m
function
f=_f(x)
f=0.5-((sin(sqrt(x(1)^2+x(2)^2)))^2-0.5)/(1+0.001*(x(1)^2+x(2)^2)^2)
然後用fmins函數尋找極值。
x
=
fmins('_f',
[0
0],
[2
2]);
另外你的語句中有錯,少寫了一個括弧,你再自己檢查一下。
Ⅹ 用matlab的optimization工具箱遺傳演算法優化函數,被優化的函數和條件約束如下,請問為會有報錯(圖片)
你的約束函數有問題,x如果超出了反正切的默認范圍,就會出現復數
此時你的程序就沒辦法通過復數的ceq進行計算了