當前位置:編程學習大全網 - 編程語言 - 請高人指點:matlab遺傳算法工具箱編程,求壹個多約束,多元方程的最小值?

請高人指點: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;

  • 上一篇:簡單生活的散文
  • 下一篇:UG畫好的三維圖怎麽生成NC碼
  • copyright 2024編程學習大全網