2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




Начать новую тему Ответить на тему
 
 Генетические и др. алгоритмы в Matlab: неэффективность?
Сообщение04.01.2022, 21:05 


23/03/14
48
Ниже приведён код, использую версию R2015b.
Вкратце: есть булевый вектор $x$, состоящий всего из 20000 координат, нам надо найти, при каких значениях его длина максимальна.
Понятно, что каждая его координата должна быть равна 1, а не 0.
Но в Matlab ни генетический алгоритм, ни метод обжига не могут справиться с такой простой задачей, застревают очень далеко от оптимума.
Результаты улучшаются разве что при выборе начального вектора, более близкого к оптимальному, но и там застревают достаточно быстро.
Что это: ошибка пользователя и программного кода или баг в самом Matlab?

Вот результат когда, а ниже сам код.

код: [ скачать ] [ спрятать ]
Используется синтаксис Matlab M
x_ga = DummyClass.findOptimumGA( 100, 0.5 ); x_sa = DummyClass.findOptimumSA( 1000, 0.5 );

Optimization terminated: maximum number of generations exceeded.
array len:     20000
result sum:    12122             % почему хотя бы не >19000?
non-zero rate: 0.606100      % почему хотя бы не >0.95?

Maximum number of iterations exceeded: increase options.MaxIter.
array len:     20000
result sum:    10038             % почему хотя бы не >19000?
non-zero rate: 0.501900      % почему хотя бы не >0.95?

x_ga = DummyClass.findOptimumGA( 100, 0.3 ); x_sa = DummyClass.findOptimumSA( 1000, 0.3 );

Optimization terminated: average change in the penalty fitness value less than options.TolFun
and constraint violation is less than options.TolCon.
array len:     20000
result sum:    13968             % почему хотя бы не >19000?
non-zero rate: 0.698400      % почему хотя бы не >0.95?

Maximum number of iterations exceeded: increase options.MaxIter.
array len:     20000
result sum:    13960              % почему хотя бы не >19000?
non-zero rate: 0.698000       % почему хотя бы не >0.95?
 



код: [ скачать ] [ спрятать ]
Используется синтаксис Matlab M
classdef DummyClass
    properties
    end;

    properties ( Constant )
    end;

    methods ( Static )
        function [ resultOptimum ] = optfunc( x )
            resultOptimum = -( x * x' );
        end;
       
        function [ x_par ] = findOptimumGA( MaxIter, a )
            objectiveFunction = @( x ) DummyClass.optfunc( x );
            x0 = round( rand( 1, 20000 ) > a );
            lb = zeros( size( x0 ) );
            ub = ones( size( x0 ) );
           
            opts = gaoptimset( 'TolFun', 1e-40 );
            opts = gaoptimset( opts, 'PlotFcns', @gaplotbestf );
            opts = gaoptimset( opts, 'Generations', MaxIter );
            opts = gaoptimset( opts,'InitialPopulation', x0 );
           
            [x_par, fval, exitflag] = ga( objectiveFunction, numel(lb), [], [], [], [], lb, ub, [], 1 : numel(lb), opts);

            fprintf( 'array len:     %5d\n', numel( x_par ) );
            fprintf( 'result sum:    %5d\n', sum( x_par ) );
            fprintf( 'non-zero rate: %f\n', mean( 0 ~= x_par ) );
        end;
       
        function [ x_par ] = findOptimumSA( MaxIter, a )
            objectiveFunction = @( x ) DummyClass.optfunc( x );
            x0 = round( rand( 1, 20000 ) > a );
            lb = zeros( size( x0 ) );
            ub = ones( size( x0 ) );

            options = saoptimset('MaxIter', MaxIter );
            [x_par, fval, exitFlag, output] = simulannealbnd( objectiveFunction, x0, lb, ub, options);

            fprintf( 'array len:     %5d\n', numel( x_par ) );
            fprintf( 'result sum:    %5d\n', sum( x_par ) );
            fprintf( 'non-zero rate: %f\n', mean( 0 ~= x_par ) );
        end;
    end;
end
 

 Профиль  
                  
 
 Re: Генетические и др. алгоритмы в Matlab: неэффективность?
Сообщение08.01.2022, 19:12 


08/01/22

41
Я сам писал генетику в матлабе. Готовая функция работает неважно.

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 2 ] 

Модераторы: Karan, Toucan, PAV, maxal, Супермодераторы



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group