exponenta event banner

Смешанное целое число ga Оптимизация

Решение смешанного целого числа Задач оптимизации

ga может решить проблемы, когда определенные переменные являются целочисленными. Дайте IntCon, вектор компонентов x, которые являются целыми числами:

[x,fval,exitflag] = ga(fitnessfcn,nvars,A,b,[],[],...
    lb,ub,nonlcon,IntCon,options)

IntCon является вектором положительных целых чисел, который содержит x компоненты, которые являются целочисленными. Для примера, если вы хотите ограничить x(2) и x(10) чтобы быть целыми числами, задайте IntCon на [2,10].

surrogateopt решатель также принимает целочисленные ограничения.

Примечание

Существуют ограничения на типы проблем, которые ga может решить с целочисленными переменными. В частности, ga не принимает никаких ограничений равенства, когда существуют целочисленные переменные. Для получения дополнительной информации смотрите Характеристики Целочисленного Решателя ga.

Совет

ga решает целочисленные задачи лучше всего, когда вы обеспечиваете нижние и верхние границы для каждого x компонента.

Смешанная целочисленная оптимизация функции Растригина

Этот пример показывает, как найти минимум функций Растригина, ограниченных, поэтому первый компонент x является целым числом. Компоненты x дополнительно ограничены в области 5πx(1)20π,-20πx(2)-4π .

Установите границы для вашей задачи

lb = [5*pi,-20*pi];
ub = [20*pi,-4*pi];

Установите функцию построения графика, чтобы вы могли просмотреть прогресс ga

opts = optimoptions('ga','PlotFcn',@gaplotbestf);

Вызовите решатель ga, где x (1) имеет целочисленные значения

rng(1,'twister') % for reproducibility
IntCon = 1;
[x,fval,exitflag] = ga(@rastriginsfcn,2,[],[],[],[],...
    lb,ub,[],IntCon,opts)

Figure Genetic Algorithm contains an axes. The axes with title Best: 424.136 Mean: 424.368 contains 2 objects of type line. These objects represent Best penalty value, Mean penalty value.

Optimization terminated: average change in the penalty fitness value less than options.FunctionTolerance
and constraint violation is less than options.ConstraintTolerance.
x = 1×2

   16.0000  -12.9325

fval = 424.1355
exitflag = 1

ga быстро сходится к решению.

Характеристики целочисленного решателя ga

Существуют некоторые ограничения на типы проблем, которые ga может решить, когда вы включаете целочисленные ограничения:

  • Нет линейных ограничений равенства. Должно быть, у вас есть   Aeq = [] и   beq = []. Для возможного обходного пути смотрите No Equality Constraints.

  • Нет нелинейных ограничений равенства. Любая нелинейная функция ограничения должна вернуться [] для нелинейного ограничения равенства. Для возможного обходного пути смотрите Пример: Целочисленное программирование с нелинейным ограничением равенства.

  • Только doubleVector тип населения.

  • Нет пользовательской функции создания (CreationFcn опция), функция кроссовера (CrossoverFcn опция), функция мутации (MutationFcn опция) или начальные счета (InitialScoreMatrix опция). Если вы поставляете что-либо из этого, ga переопределяет их настройки.

  • ga использует только двоичную функцию выбора турнира (SelectionFcn опция) и переопределяет любую другую настройку.

  • Гибридная функция отсутствует. ga переопределяет любой параметр HybridFcn опция.

  • ga игнорирует ParetoFraction, DistanceMeasureFcn, InitialPenalty, и PenaltyFactor опции.

Перечисленные ограничения в основном являются естественными, а не произвольными. Для примера:

  • Гибридных функций, поддерживающих целочисленные ограничения, нет. Так ga не использует гибридные функции, когда существуют целочисленные ограничения.

  • Чтобы получить целочисленные переменные, ga использует специальные функции создания, кроссовера и мутации.

Никаких ограничений равенства

Вы не можете использовать ограничения равенства и целочисленные ограничения в той же задаче. Можно попытаться обойти это ограничение, включив два ограничения неравенства для каждого линейного ограничения равенства. Для примера, чтобы попытаться включить ограничение

3 <reservedrangesplaceholder1> 1 - 2 <reservedrangesplaceholder0> 2 = 5,

создать два ограничения неравенства:

3 <reservedrangesplaceholder1> 1 - 2 <reservedrangesplaceholder0> 2  5
3 <reservedrangesplaceholder1> 1 - 2 <reservedrangesplaceholder0> 2  5.

Чтобы записать эти ограничения в форму  A x ≤ b, умножить второе неравенство на -1:

– 3 <reservedrangesplaceholder1> 1 + 2 <reservedrangesplaceholder0> 2 -5.

Можно попытаться включить ограничение равенства с помощью A = [3,-2;-3,2] и b = [5;-5].

Помните, что эта процедура может быть неудачной; ga испытывает трудности с одновременными целыми числами и ограничениями равенствами.

Пример: Целочисленное программирование с нелинейным ограничением равенства.  Этот пример пытается найти минимум функции Ackley (включенной в ваше программное обеспечение) в пяти размерностях с этими ограничениями:

  • x(1), x(3), и x(5) являются целыми числами.

  • norm(x) = 4.

Функцию Ackley трудно минимизировать. Добавление целого числа и ограничений равенства увеличивает сложность.

Чтобы включить нелинейное ограничение равенства, задайте небольшой допуск tol что позволяет использовать норму x быть внутри tol от 4. Без допуска нелинейное ограничение равенства никогда не выполняется, и решатель не понимает, когда у него есть возможное решение.

  1. Напишите выражение   norm(x) = 4 как два неравенства «меньше нуля»:

      norm(x) - 4 ≤ 0
      -(norm(x) - 4) ≤ 0.

  2. Допустим небольшой допуск в неравенствах:

        norm(x) - 4 - tol ≤ 0
        -(norm(x) - 4) - tol ≤ 0.

  3. Напишите нелинейную функцию ограничения неравенства, которая реализует эти неравенства:

    function [c, ceq] = eqCon(x)
    
    ceq = [];
    rad = 4;
    tol = 1e-3;
    confcnval = norm(x) - rad;
    c = [confcnval - tol;-confcnval - tol];
  4. Установите опции:

    • MaxStallGenerations = 50 - Разрешить решателю попробовать некоторое время.

    • FunctionTolerance = 1e-10 - Задайте более строгий критерий остановки, чем обычно.

    • MaxGenerations = 300 - Разрешить больше поколений, чем по умолчанию.

    • PlotFcn = @gaplotbestfun - Наблюдайте за оптимизацией.

    opts = optimoptions('ga','MaxStallGenerations',50,'FunctionTolerance',1e-10,...
        'MaxGenerations',300,'PlotFcn',@gaplotbestfun);
  5. Установите нижнюю и верхнюю границы, чтобы помочь решателю:

    nVar = 5;
    lb = -5*ones(1,nVar);
    ub = 5*ones(1,nVar);
  6. Решите задачу:

    rng(0,'twister') % for reproducibility
    [x,fval,exitflag] = ga(@ackleyfcn,nVar,[],[],[],[], ...
        lb,ub,@eqCon,[1 3 5],opts);
    Optimization terminated: average change in the penalty fitness value less than options.FunctionTolerance
    and constraint violation is less than options.ConstraintTolerance.

  7. Исследуйте решение:

    x,fval,exitflag,norm(x)
    
    x =
    
             0   -1.7367   -3.0000   -0.0000   -2.0000
    
    
    fval =
    
        5.2303
    
    
    exitflag =
    
         1
    
    
    ans =
    
        4.0020

    Нечетная x компоненты являются целыми числами, как задано. Норма x является 4, в пределах заданной относительной погрешности 1e-3.

  8. Несмотря на положительный выходной флаг, решение не является глобальным оптимумом. Еще раз запустите задачу и исследуйте решение:

    opts = optimoptions('ga',opts,'Display','off');
    [x2,fval2,exitflag2] = ga(@ackleyfcn,nVar,[],[],[],[], ...
        lb,ub,@eqCon,[1 3 5],opts);

    Исследуйте второе решение:

    x2,fval2,exitflag2,norm(x2)
    
    x2 =
    
       -2.0000    2.8930         0   -1.9095         0
    
    
    fval2 =
    
        4.5520
    
    
    exitflag2 =
    
         0
    
    
    ans =
    
        4.0020

    Второй запуск дает лучшее решение (более низкое значение функции соответствия). Снова, нечетная x компоненты являются целыми числами и нормой x2 является 4, в пределах заданной относительной погрешности 1e-3.

Помните, что эта процедура может быть неудачной; ga испытывает трудности с одновременными целыми числами и ограничениями равенствами.

Эффективное целое число ga

Использовать ga наиболее эффективно при целочисленных задачах, следуйте этим рекомендациям.

  • Связать каждый компонент так плотно, как вы можете. Эта практика дает ga наименьшее пространство поиска, разрешающее ga наиболее эффективно искать.

  • Если вы не можете связать компонент, задайте соответствующую начальную область значений. По умолчанию ga создает начальную генеральную совокупность с областью значений [-1e4,1e4] для каждого компонента. Меньший или больший начальный область значений может дать лучшие результаты, когда значение по умолчанию неуместно. Чтобы изменить начальную область значений, используйте InitialPopulationRange опция.

  • Если у вас больше 10 переменных, задайте размер населения, который больше, чем по умолчанию, используя PopulationSize опция. Значение по умолчанию является 200 для шести или более переменных. Для большой численности населения:

    • ga может занять много времени, чтобы сойтись. Если вы достигаете максимального количества поколений (выходной флаг 0), увеличить значение MaxGenerations опция.

    • Уменьшите скорость мутации. Для этого увеличьте значение CrossoverFraction опция от ее значения по умолчанию 0.8 на 0.9 или выше.

    • Увеличьте значение EliteCount опция от ее значения по умолчанию 0.05*PopulationSize на 0.1*PopulationSize или выше.

Для получения информации об опциях смотрите ga options входной параметр.

Целое число ga Алгоритм

Целочисленное программирование с ga включает несколько модификаций базового алгоритма (см. «Как работает генетический алгоритм»). Для целочисленного программирования:

  • Специальные функции создания, кроссовера и мутации приводят переменные в исполнение как целые числа. Для получения дополнительной информации см. Deep et al. [2].

  • Генетический алгоритм пытается минимизировать штрафную функцию, а не функцию соответствия. Функция штрафа включает термин недопустимости. Эта функция штрафа сочетается с выбором двоичных турниров, чтобы выбрать индивидуумов для последующих поколений. Значение штрафной функции представителя из населения является:

    • Если представитель допустим, функция штрафа является функцией соответствия.

    • Если представитель недопустим, функция штрафа является максимально допустимой функцией соответствия среди допустимых представителей населения плюс сумма нарушений ограничений (недопустимых) точек.

    Для получения дополнительной информации о функции штрафа см. Deb [1].

  • ga не применяет линейные ограничения, когда существуют целочисленные ограничения. Вместо этого, ga включает линейные нарушения ограничений в штрафную функцию.

Ссылки

[1] Дэб, Калянмой. Эффективный метод обработки ограничений для генетических алгоритмов. Компьютерные методы в прикладной механике и технике, 186 (2-4), стр. 311-338, 2000 .

[2] Deep, Kusum, Crishna Pratap Singh, M.L. Kansal, and C. Mohan. Действительный кодированный генетический алгоритм для решения целочисленных и смешанных целочисленных задач оптимизации. Прикладная математика и расчеты, 212 (2), стр. 505-518, 2009.

Похожие темы