2016-12-15 23 views
-1

find minimum of math function with genetic algorithm in matlabнайти минимум функции математики с генетическим алгоритмом в MATLAB, я знаю, есть набор инструментов MATLAB для GA, но я хочу achive его programmically)

Каких изменений необходимы в этом файлы-main.m?

global population; 
global fitness; 
global popsize; 
format bank; 
popsize=50; 
report=zeros(popsize,2); 
selected=ones(1,50); 
fitness=zeros(1,50); 
population = randi([0 1], 50, 10); 
for j=1:popsize 
calFitness(); 
for i=1:popsize 
    selected(1,i)=(rol_wheel(fitness)); 
end; 
population =recombin(population,selected); 
report(j,:)=[min(fitness),mean(fitness)]; 
end 

calFitness

function [] = calFitness() 
%UNTITLED2 Summary of this function goes here 
% Detailed explanation goes here 
global population; 
global fitness; 
global popsize; 
%population=population.*2; 
for i=1:popsize 
    x=bin2dec(num2str(population(i,:)))/2; 
    fitness(1,i)= abs(x*sin(sqrt(abs(x)))); 

%disp(fitness); 
end 

%disp(); 

rol_wheel

% --------------------------------------------------------- 
% Roulette Wheel Selection Algorithm. A set of weights 
% represents the probability of selection of each 
% individual in a group of choices. It returns the index 
% of the chosen individual. 
% Usage example: 
% fortune_wheel ([1 5 3 15 8 1]) 
% most probable result is 4 (weights 15) 
% --------------------------------------------------------- 
function choice = rol_wheel(weights) 
    accumulation = cumsum(weights); 
    p = rand() * accumulation(end); 
    chosen_index = -1; 
    for index = 1 : length(accumulation) 
    if (accumulation(index) > p) 
     chosen_index = index; 
     break; 
    end 
    end 
    %keyboard 
    choice = chosen_index; 

recombin

function pop = recombin(popu,selected) 
global popsize; 
pop=zeros(50,10); 
for i=1:popsize/2 
    rc=randi([1,10]); 
    for j=1:10 
      pop(i,1:rc-1)=popu(selected(i),1:rc-1); 
      pop(i,rc:end)=popu(selected(i+25),rc:end); 
      pop(i+25,1:rc-1)=popu(selected(i+25),1:rc-1); 
      pop(i+25,rc:end)=popu(selected(i),rc:end); 
      %keyboard 
    end 
end 
end 

Я хочу найти минимум функции с этим файлом. Какая модификация нужна сейчас?

+0

какая модификация необходима @zhilevan – pratieks

+0

какая модификация нужна @ Dennis Jaheruddin..in this post.http: //stackoverflow.com/questions/13255606/find-minimum-of-math-function-with-genetic-algorithm-in -matlab – pratieks

ответ

0

Вам нужно в фитнесе заменить

fitness(1,i)= abs(x*sin(sqrt(abs(x))));

для

fitness(1,i)= 1/abs(x*sin(sqrt(abs(x)))); или что-то в этом роде;

Но вам нужно добавить защиту от нулевого деления.