A. 用遺傳演算法工具箱求解一個多目標優化問題,現在需要一個matlab程序,求高人指點
用遺傳演算法工具箱求解一個多目標優化問題的步驟:
1、根據題意,建立自定專義目標函數,ga_fun1(x)
2、在命令窗屬口中,輸入
>> optimtool %調用遺傳演算法工具箱
3、在遺傳演算法工具箱界面中,分別對Fitnessfunction框內輸入@ga_fun1();A框內輸入[1,1,1];b框內輸入16;Aeq框內輸入[];beq框內輸入[];Lower框內輸入[0,0,0];Upper框內輸入[];
4、單擊Start。得到x=4.508 y=2.513 z=1.912值。
B. 請高人指點:matlab遺傳演算法工具箱編程,求一個多約束,多元非線性方程的最小值
將下屬兩個目標函數分別保存在兩個m文件中
function f1=func1(x) %第一目標函數
f1=x(:,1).*x(:,1)./4+x(:,2).*x(:,2)./4;
function f2=func2(x) %第二目標函數
f2=x(:,1).*(1-x(:,2))+10;
function GA()
clear;clc;close all
NIND=100; %個體數目
MAXGEN=50; %最大遺傳代數
NVAR=2; %變數個數
PRECI=20; %變數的二進制位數
GGAP=0.9; %代溝
trace1=[];trace2=[];trace3=[]; %性能跟蹤
%建立區域描述器
% rep([PRECI],[1,NVAR])
FieldD=[rep([PRECI],[1,NVAR]);rep([1;2],[1,NVAR]);rep([1;0;1;1],[1,NVAR])];
Chrom=crtbp(NIND,NVAR*PRECI); %初始種群
v=bs2rv(Chrom,FieldD) ; %初始種群十進制轉換
gen=1;
while gen<MAXGEN,
[NIND,N]=size(Chrom);
M=fix(NIND/2);
ObjV1=func1(v(1:M,:)); %分組後第一目標函數值
FitnV1=ranking(ObjV1); %分配適應度值
SelCh1=select('sus',Chrom(1:M,:),FitnV1,GGAP); %選擇
ObjV2=func2(v(M+1:NIND,:)); %分組後第二目標函數值
FitnV2=ranking(ObjV2); %分配適應度值
SelCh2=select('sus',Chrom(M+1:NIND,:),FitnV2,GGAP); %選擇
SelCh=[SelCh1;SelCh2]; %合並
SelCh=recombin('xovsp',SelCh,0.7); %重組
Chrom=mut(SelCh); %變異
v=bs2rv(Chrom,FieldD);
trace1(gen,1)=min(func1(v));
trace1(gen,2)=sum(func1(v))/length(func1(v));
trace2(gen,1)=min(func2(v));
trace2(gen,2)=sum(func2(v))/length(func2(v));
trace3(gen,1)=min(func1(v)+func2(v));
trace3(gen,2)=sum(func1(v))/length(func1(v))+sum(func2(v))/length(func2(v));
gen=gen+1;
end
figure(1);clf;
plot(trace1(:,1));hold on;plot(trace1(:,2),'-.');
plot(trace1(:,1),'.');plot(trace1(:,2),'.');grid on;
legend('解的變化','種群均值的變化')
xlabel('迭代次數');ylabel('目標函數值');
figure(2);clf;
plot(trace2(:,1));hold on;
plot(trace2(:,2),'-.');
plot(trace2(:,1),'.');
plot(trace2(:,2),'.');grid;
legend('解的變化','種群均值的變化');
xlabel('迭代次數');ylabel('目標函數值');
figure(3);clf;
plot(trace3(:,1));hold on;
plot(trace3(:,2),'-.');
plot(trace3(:,1),'.');
plot(trace3(:,2),'.');grid;
legend('解的變化','種群均值的變化');
xlabel('迭代次數');ylabel('目標函數值');
figure(4);clf;plot(func1(v));hold on;
plot(func2(v),'r-.');grid;
C. 怎麼用遺傳演算法工具箱求多目標函數的最優解
可以用多個目標並列選擇法,將種群按照目標函數的個數進行劃分,分別進行適應度排序,選擇,然後將選出的子種群合並,再進行交叉、變異等操作。
D. MATLAB遺傳演算法工具箱優化變數定義問題
你定義的目標函數有問題。應把h1、h2、h3看成一個變數組,即h=[h1,h2,h3],即
function y=Fitfun1(h)
y=25*h(1)+50*h(2)-10*h(3) %為了說回明問題,把函數表達答式寫成該形式
如還不能理解,最好把具體問題貼出來,包括其約束條件,以便我們幫助你。
E. matlab遺傳演算法工具箱求解多元函數顯示輸入參數數目不足求解答,非常感謝
錯誤的主要原因是你寫的函數有問題。函數應該這樣來表示:
function y = Test1(x)
a=x(1);b=x(2);
y=a+b;
end
使用優化工具箱,選擇ga,運行可以得到如下結果
F. 如何用遺傳演算法實現多變數的最優化問題
是不是像求函數最值那樣子?建議你了解一下遺傳演算法的實數編碼,這個對於求函數最值很方便,不用像二進制那樣需要轉換。
簡單介紹一下思路:
最重要的是確定適應度函數,只要確定這個函數就很容易了,就用你不會編程,直接調用matlab的工具箱就行了。
1st.設置種群規模,並初始化種群p,並計算各個個體的適應度。
例如,20個個體,每個個體包含5個變數,x1,x2,x3,x4,x5.
如果你用matlab來編程的話,這個可以很容易實現,會用到random('unif',a,b)這個函數吧。
例如x1的取值范圍是[0,1],那麼x1=random('unif',0,1).
2nd.採用輪盤賭選出可以產生後代的父本,p_parents。
額,輪盤賭的實質就是適應度大的被選出的概率大。這個不難,但說起來比較長,你可以自己去看一下。
3rd.雜交過程的思路隨機將p_parents中的個體隨機兩兩配對,然後隨機產生一個1到n的數(n為變數的個數),設為i,交換每對父本中i之後的變數值。交換以後的p_parents成為後代p_offspring.
這里變起來有點點復雜,不過只要耐心一點,編好配對過程和交換過程。
4th.變異過程,這個比較簡單,不過需要自己把握的較好。
基本的思路是設置一個概率,例如0.05,然後產生一個隨機數如果隨機數比0.05小那麼這個變數值就要產生微小的增加或減少。
這個變異過程要歷遍p_offspring所有的變數喔。
5th.將p和p_offspring合並起來,然後選出適應度大的,重新構成一個如原始種群規模相等的種群。
G. 使用matlab遺傳演算法工具箱如何加入目標函數中變數的約束條件啊,可否在M文件中加
首先回答你第一個問題:怎麼加入變數的約束條件?
打開遺傳演算法工具箱的窗體中會有下圖所示的選項,即是約束條件的編輯
至於添加的方式,這里要重點的提一下,首先將問題抽象成規劃問題的標准形式(如果你不懂什麼是標准形式的話,建議你去翻閱運籌學那本書,上告訴你什麼是標准形式),然後用矩陣語言寫出來,最後將矩陣的系數填寫到線性不等約束和線性相等約束中,同時定義所求變數x的上界和下界(記住有多少個變數就有多少列,如果你發現有些條件中沒有出現某些變數,那麼就應該用0補足,這個是matlab解決規劃問題與lingo想比較麻煩的一個地方,)。
然後回答你第二個問題:可否在M文件中添加約束條件?
當然可以,界面的東西是為了方便不熟悉matlab編程的人而設計出來的,但是其底層的演算法和介面肯定是有的。
碰到不懂的函數,請記得:help函數名
helpga之後會得到一下一些函數
ga
//這個是定義
Syntax //這個是語法也即是調用的規則
x=ga(fitnessfcn,nvars)
x=ga(fitnessfcn,nvars,A,b)
x=ga(fitnessfcn,nvars,A,b,Aeq,beq)
x=ga(fitnessfcn,nvars,A,b,Aeq,beq,LB,UB)
x=ga(fitnessfcn,nvars,A,b,Aeq,beq,LB,UB,nonlcon)
x=ga(fitnessfcn,nvars,A,b,Aeq,beq,LB,UB,nonlcon,options)
x=ga(problem)
[x,fval]=ga(...)
[x,fval,exitflag]=ga(...)直接給你將最長的那個吧
x=ga(fitnessfcn,nvars,A,b,Aeq,beq,LB,UB,nonlcon,options)
X是返回所求的解
fitnessfcn是適應度函數
nvars是適應度函數中所含變數的維數
A是不等式約束中變數的系數矩陣,b是不等式約束中不含變數的值矩陣
Aeq是等式約束中變數的系數矩陣,beq是等式約束中不含變數的值矩陣
LB是下界,UB是上界
nonlcon是非線性約束條件
至於options嘛 我也木有用過,其實你也可以不用管的。
懂了木有呢,親?
H. 請問多變數遺傳演算法的Matlab程序還有嗎
簡單介紹一下思路:
最重要的是確定適應度函數,只要確定這個函數就很容易了,就用你不會編程,直接調用matlab的工具箱就行了。
1st.設置種群規模,並初始化種群p,並計算各個個體的適應度。
例如,20個個體,每個個體包含5個變數,x1,x2,x3,x4,x5.
如果你用matlab來編程的話,這個可以很容易實現,會用到random('unif',a,b)這個函數吧。
例如x1的取值范圍是[0,1],那麼x1=random('unif',0,1).
I. matlab遺傳演算法工具箱在哪
直接在命令窗口裡邊輸入gatool就行了,用遺傳演算法還可以使用ga函數,具體使用格式可以在help系統里看ga,你還可以按照如下步驟打開遺傳演算法工具箱:1,打開MATLAB,2點擊左下方的START按鈕 3,點toolboxes,打開後選擇Genetic Algorithm and Direct Search 然後就可以進入gatool了,然後就會彈出ga工具箱(註:我的版本是7.7的,不同版本可能不同)