Ограниченная минимизация Используя ga, Основанный на проблеме

В этом примере показано, как минимизировать целевую функцию согласно нелинейным ограничениям неравенства и границам, с помощью ga в подходе, основанном на проблеме. Для основанной на решателе версии этой проблемы смотрите, что Ограниченная Минимизация Использует Генетический алгоритм.

Ограниченная проблема минимизации

Для этой проблемы функция фитнеса, чтобы минимизировать является простой функцией 2D переменных X и Y.

camxy = @(X,Y)(4 - 2.1.*X.^2 + X.^4./3).*X.^2 + X.*Y + (-4 + 4.*Y.^2).*Y.^2;

Эта функция описана в Диксоне и Сзего [1].

Кроме того, проблема имеет нелинейные ограничения и границы.

   x*y + x - y + 1.5 <= 0  (nonlinear constraint)
   10 - x*y <= 0           (nonlinear constraint)
   0 <= x <= 1             (bound)
   0 <= y <= 13            (bound)

Постройте нелинейную область ограничений на объемной поверхностной диаграмме функции фитнеса. Ограничения ограничивают решение небольшой области выше обеих красных кривых.

x1 = linspace(0,1);
y1 = (-x1 - 1.5)./(x1 - 1);
y2 = 10./x1;
[X,Y] = meshgrid(x1,linspace(0,13));
Z = camxy(X,Y);
surf(X,Y,Z,"LineStyle","none")
hold on
z1 = camxy(x1,y1);
z2 = camxy(x1,y2);
plot3(x1,y1,z1,'r-',x1,y2,z2,'r-')
xlim([0 1])
ylim([0 13])
zlim([0,max(Z,[],"all")])
hold off

Figure contains an axes object. The axes object contains 3 objects of type surface, line.

Создайте переменные оптимизации, проблему и ограничения

Чтобы настроить эту проблему, создайте переменные x оптимизации и y. Установите границы, когда вы создадите переменные.

x = optimvar("x","LowerBound",0,"UpperBound",1);
y = optimvar("y","LowerBound",0,"UpperBound",13);

Создайте цель как выражение оптимизации.

cam = camxy(x,y);

Создайте задачу оптимизации с этой целевой функцией.

prob = optimproblem("Objective",cam);

Создайте два нелинейных ограничения неравенства и включайте их в проблему.

prob.Constraints.cons1 = x*y + x - y + 1.5 <= 0;
prob.Constraints.cons2 = 10 - x*y <= 0;

Рассмотрите проблему.

show(prob)
  OptimizationProblem : 

	Solve for:
       x, y

	minimize :
       (((((4 - (2.1 .* x.^2)) + (x.^4 ./ 3)) .* x.^2) + (x .* y)) + (((-4)
     + (4 .* y.^2)) .* y.^2))


	subject to cons1:
       ((((x .* y) + x) - y) + 1.5) <= 0

	subject to cons2:
       (10 - (x .* y)) <= 0

	variable bounds:
       0 <= x <= 1

       0 <= y <= 13

Решите задачу

Решите задачу, задав ga решатель.

[sol,fval] = solve(prob,"Solver","ga")
Solving problem using ga.
Optimization terminated: average change in the fitness value less than options.FunctionTolerance
 and constraint violation is less than options.ConstraintTolerance.
sol = struct with fields:
    x: 0.8122
    y: 12.3103

fval = 9.1268e+04

Добавьте визуализацию

Чтобы наблюдать прогресс решателя, задайте опции тот выбор две функции построения графика. Функция построения графика gaplotbestf строит лучшее значение целевой функции в каждой итерации и функцию построения графика gaplotmaxconstr строит максимальное нарушение ограничений в каждой итерации. Установите эти две функции построения графика в массиве ячеек. Кроме того, информация об отображении о прогрессе решателя в Командном окне путем установки Display опция к 'iter'.

options = optimoptions(@ga,...
    'PlotFcn',{@gaplotbestf,@gaplotmaxconstr},...
    'Display','iter');

Запустите решатель, включая options аргумент.

[sol,fval] = solve(prob,"Solver","ga","Options",options)
Solving problem using ga.

Single objective optimization:
2 Variable(s)
2 Nonlinear inequality constraint(s)

Options:
CreationFcn:       @gacreationuniform
CrossoverFcn:      @crossoverscattered
SelectionFcn:      @selectionstochunif
MutationFcn:       @mutationadaptfeasible

                              Best       Max        Stall
Generation  Func-count        f(x)     Constraint  Generations
    1           2520       91357.8            0      0
    2           4982       91324.1     4.55e-05      0
    3           7914       97166.6            0      0
    4          16145       91268.4    0.0009997      0
Optimization terminated: average change in the fitness value less than options.FunctionTolerance
 and constraint violation is less than options.ConstraintTolerance.

Figure Genetic Algorithm contains 2 axes objects. Axes object 1 with title Best: 91264.8 Mean: 91268.3 contains 2 objects of type line. These objects represent Best fitness, Mean fitness. Axes object 2 with title Max constraint: 0.00099968 contains an object of type line.

sol = struct with fields:
    x: 0.8123
    y: 12.3103

fval = 9.1268e+04

Нелинейные ограничения вызывают ga решить много подпроблем в каждой итерации. Как показано и в графиках и в итеративном отображении, процесс решения имеет немного итераций. Однако Func-count столбец в итеративном отображении показывает много вычислений функции на итерацию.

Неподдерживаемые функции

Если ваши объективные или нелинейные ограничительные функции не поддерживаются (см. Поддерживаемые Операции для Переменных и выражений Оптимизации), используйте fcn2optimexpr преобразовывать их в форму, подходящую для подхода, основанного на проблеме. Например, предположите это вместо ограничения xy10, у вас есть ограничение I1(x)+I1(y)10, где I1(x) модифицированная Функция Бесселя besseli(1,x). (Функции Бесселя не являются поддерживаемыми функциями.) Создают это ограничение с помощью fcn2optimexpr. Во-первых, создайте выражение оптимизации для I1(x)+I1(y).

bfun = fcn2optimexpr(@(t,u)besseli(1,t) + besseli(1,u),x,y);

Затем замените ограничение cons2 с ограничением bfun >= 10.

prob.Constraints.cons2 = bfun >= 10;

Решите задачу. Решение отличается, потому что область ограничений отличается.

[sol2,fval2] = solve(prob,"Solver","ga","Options",options)
Solving problem using ga.

Single objective optimization:
2 Variable(s)
2 Nonlinear inequality constraint(s)

Options:
CreationFcn:       @gacreationuniform
CrossoverFcn:      @crossoverscattered
SelectionFcn:      @selectionstochunif
MutationFcn:       @mutationadaptfeasible

                              Best       Max        Stall
Generation  Func-count        f(x)     Constraint  Generations
    1           2512       974.044            0      0
    2           4974       960.998            0      0
    3           7436        963.12            0      0
    4          12001        960.83    0.0009335      0
Optimization terminated: average change in the fitness value less than options.FunctionTolerance
 and constraint violation is less than options.ConstraintTolerance.

Figure Genetic Algorithm contains 2 axes objects. Axes object 1 with title Best: 960.59 Mean: 960.841 contains 2 objects of type line. These objects represent Best fitness, Mean fitness. Axes object 2 with title Max constraint: 0.000933461 contains an object of type line.

sol2 = struct with fields:
    x: 0.4999
    y: 3.9979

fval2 = 960.8300

Ссылки

[1] Диксон, L. C. W. и G.P. Szego (редакторы).. К глобальной оптимизации 2. Северная Голландия: Elsevier Science Ltd., Амстердам, 1978.

Смотрите также

| |

Похожие темы

Для просмотра документации необходимо авторизоваться на сайте