Решение смешанной целочисленной задачи инженерного проектирования с использованием генетического алгоритма

Этот пример показывает, как решить смешанную целочисленную задачу инженерного проекта с помощью Генетического алгоритма (ga) решатель в Global Optimization Toolbox.

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

В этом примере мы решим две ограниченные версии задачи, опубликованной в [1].

Проект ступенчатой консольной балки

Ступенчатая консольная балка поддерживается на одном конце, а нагрузка прикладывается на свободном конце, как показано на рисунке ниже. Балка должна быть способна поддерживать заданную нагрузку, $P$на фиксированном расстоянии$L$ от поддержки. Конструкторы балки могут изменять ширину () $b_i$и высоту () $h_i$каждой секции. Мы примем, что каждая секция консоли имеет одинаковую длину,.$l$

Объем балки

Объем балки,, $V$является суммой объема отдельных сечений

$$V = l(b_1h_1 + b_2h_2 + b_3h_3 + b_4h_4 + b_5h_5)$$

Ограничения на проект: 1 - напряжение изгиба

Рассмотрим одну консольную балку с центром координат в центре ее поперечного сечения на свободном конце балки. Напряжение изгиба в точке$(x, y, z)$ в балке определяется следующим уравнением

$$\sigma_b = M(x)y/I$$

где$M(x)$ - изгибающий момент в, $x$-$x$ расстояние от конечной нагрузки и -$I$ момент площади инерции балки.

Теперь в ступенчатой консольной балке, показанной на рисунке, максимальный момент каждого участка балки, $PD_i$где$D_i$ является максимальным расстоянием от конечной нагрузки, $P$для каждого участка балки. Поэтому максимальное напряжение для -го $i$сечения балки,, $\sigma_i$задается как

$$\sigma_i = PD_i(h_i/2)/I_i$$

где максимальное напряжение происходит на краю балки,. $y = h_i/2$Момент площади инерции -$i$го сечения луча задан как

$$I_i = b_ih_i^3/12$$

Подстановка этого в уравнение for$\sigma_i$ приводит

$$\sigma_i = 6PD_i/b_ih_i^2$$

Напряжение изгиба в каждой части консоли не должно превышать максимально допустимое напряжение,. $\sigma_{max}$Следовательно, мы можем, наконец, указать пять ограничений изгибающего напряжения (по одному для каждого шага консоли)

$$\frac{6Pl}{b_5h_5^2} \leq \sigma_{max}$$

$$\frac{6P(2l)}{b_4h_4^2} \leq \sigma_{max}$$

$$\frac{6P(3l)}{b_3h_3^2} \leq \sigma_{max}$$

$$\frac{6P(4l)}{b_2h_2^2} \leq \sigma_{max}$$

$$\frac{6P(5l)}{b_1h_1^2} \leq \sigma_{max}$$

Ограничения на проект: 2 - Отклонение конца

Отклонение конца консоли может быть вычислено с помощью второй теоремы Кастильяно, которая утверждает, что

$$\delta = \frac{\partial U}{\partial P}$$

где$\delta$ - отклонение пучка,$U$ - энергия, сохраненная в пучке от приложенной силы,.$P$

Энергия, сохраненная в консольном луче, задается

$$U = \int_0^L \! M^2/2EI \, \mathrm{d} x$$

где$M$ - момент приложенной силы.$x$

Учитывая, что$M = Px$ для консольного луча, мы можем записать вышеуказанное уравнение как

$$U =
P^2/2E \int_0^l \! [(x+4l)^2/I_1 \,
 + (x+3l)^2/I_2 \,
 + (x+2l)^2/I_3 \,
 + (x+l)^2/I_4 \,
 + x^2/I_5 ]\, \mathrm{d} x$$

где$I_n$ - момент площади инерции -$n$й части консоли. Оценка интеграла дает следующее выражение для.$U$

$$U = (P^2/2)(l^3/3E)(61/I_1 + 37/I_2 + 19/I_3 + 7/I_4 + 1/I_5)$$

Применяя теорему Кастильяно, отклонение луча в конце задается как

$$\delta = Pl^3/3E(61/I_1 + 37/I_2 + 19/I_3 + 7/I_4 + 1/I_5)$$

Теперь, конечное отклонение консоли,, $\delta$должно быть меньше, чем максимально допустимое отклонение, $\delta_{max}$что дает нам следующее ограничение.

$$Pl^3/3E(61/I_1 + 37/I_2 + 19/I_3 + 7/I_4 + 1/I_5) \leq
\delta_{max}$$

Ограничения на проект: 3 - Соотношение сторон

Для каждого шага консоли соотношение сторон не должно превышать максимально допустимое соотношение сторон,. $a_{max}$То есть,

$h_i/b_i \leq a_{max}$ для $i = 1, ..., 5$

Состояние задачи оптимизации

Теперь мы можем заявить задачу, чтобы найти оптимальные параметры для ступенчатой консольной балки, учитывая заявленные ограничения.

Пусть,$x_1 = b_1$,,$x_2 = h_1$,,$x_3 = b_2$,, $x_4 = h_2$$x_5 = b_3$$x_6 = h_3$и$x_7 = b_4$$x_8 = h_4$$x_9 = b_5$ $x_{10} = h_5$

Минимизируйте:

$$V = l(x_1x_2 + x_3x_4 + x_5x_6 + x_7x_8 + x_9x_{10})$$

При условии:

$$\frac{6Pl}{x_9x_{10}^2} \leq \sigma_{max}$$

$$\frac{6P(2l)}{x_7x_8^2} \leq \sigma_{max}$$

$$\frac{6P(3l)}{x_5x_6^2} \leq \sigma_{max}$$

$$\frac{6P(4l)}{x_3x_4^2} \leq \sigma_{max}$$

$$\frac{6P(5l)}{x_1x_2^2} \leq \sigma_{max}$$

$$\frac{Pl^3}{E}(\frac{244}{x_1x_2^3} + \frac{148}{x_3x_4^3} +
\frac{76}{x_5x_6^3} + \frac{28}{x_7x_8^3} +
\frac{4}{x_9x_{10}^3}) \leq \delta_{max}$$

$$x_2/x_1 \leq 20$$, $$x_4/x_3 \leq 20$$, $$x_6/x_5 \leq 20$$,
$$x_8/x_7 \leq 20$$ and $$x_{10}/x_9 \leq 20$$

Первая ступень балки может быть подвергнута механической обработке только до ближайшего сантиметра. То есть$x_1$ и$x_2$ должно быть целым числом. Остальные переменные непрерывны. Границы переменных приведены ниже: -

$$1 \leq x_1 \leq 5$$

$$30 \leq x_2 \leq 65$$

$$2.4 \leq x_3, x_5 \leq 3.1$$

$$45 \leq x_4, x_6 \leq 60$$

$$1 \leq x_7, x_9 \leq 5$$

$30 \leq x_8, x_{10} \leq 65$

Расчётные параметры для этой задачи

Для задачи, которую мы решим в этом примере, конечная нагрузка, которую должна поддерживать балка, является.$P = 50000 N$

Длины луча и максимальное отклонение конца:

  • Общая длина балки, $L = 500 cm$

  • Индивидуальный участок балки, $l = 100 cm$

  • Максимальное отклонение конца балки, $\delta_{max} = 2.7 cm$

Максимально допустимое напряжение на каждом шаге луча, $\sigma_{max} = 14000 N/cm^2$

Модуль Янга каждого шага луча, $E = 2\times10^{7} N/cm^2$

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

Теперь мы решаем задачу, описанную в State the Задача Оптимизации.

Задайте функции соответствия и ограничения

Исследуйте файлы MATLAB cantileverVolume.m и cantileverConstraints.m чтобы увидеть, как реализованы функции соответствия и ограничения.

Примечание к линейным ограничениям: Когда линейные ограничения заданы как ga, вы обычно задаете их через A, b, Aeq и beq входы. В этом случае мы задали их через нелинейную функцию ограничения. Это потому, что позже в этом примере некоторые переменные станут дискретными. Когда в задаче есть дискретные переменные, намного легче задать линейные ограничения в нелинейной функции ограничения. Альтернативой является изменение линейных ограничительных матриц для работы в преобразованном переменной пространстве, что не тривиально и, возможно, невозможно. Кроме того, в смешанном целом числе ga решатель, линейные ограничения не обрабатываются по-другому к нелинейным ограничениям независимо от того, как они заданы.

Установите границы

Создать векторы, содержащие нижнюю границу (lb) и верхние ограничения (ub).

lb = [1 30 2.4 45 2.4 45 1 30 1 30];
ub = [5 65 3.1 60 3.1 60 5 65 5 65];

Установите опции

Чтобы получить более точное решение, мы увеличиваем PopulationSize, и MaxGenerations опции из их значений по умолчанию и уменьшите EliteCount и FunctionTolerance опции. Эти настройки вызывают ga использовать большое население (увеличенный PopulationSize), увеличить поиск проекта пространства (уменьшенный EliteCount) и продолжать идти, пока его лучший представитель не изменится очень мало (небольшая FunctionTolerance). Мы также задаем функцию построения графика, чтобы контролировать значение функции штрафа как ga прогрессирует.

Обратите внимание, что существует ограниченный набор ga опции, доступные при решении смешанных целочисленных задач - для получения дополнительной информации см. Руководство пользователя Global Optimization Toolbox.

opts = optimoptions(@ga, ...
                    'PopulationSize', 150, ...
                    'MaxGenerations', 200, ...
                    'EliteCount', 10, ...
                    'FunctionTolerance', 1e-8, ...
                    'PlotFcn', @gaplotbestf);

Функции ga Как решить задачу

Теперь можно позвонить ga чтобы решить проблему. В операторе задачи$x_1$ и$x_2$ являются целочисленными переменными. Зададим это путем передачи вектора индекса [1 2] на ga после нелинейного входа ограничения и перед входом опций. Мы также посеяем и установите генератор случайных чисел здесь для воспроизводимости.

rng(0, 'twister');
[xbest, fbest, exitflag] = ga(@cantileverVolume, 10, [], [], [], [], ...
    lb, ub, @cantileverConstraints, [1 2], opts);
Optimization terminated: maximum number of generations exceeded.

Анализ результатов

Если задача имеет целочисленные ограничения, ga переформулирует его внутренне. В частности, функция соответствия в задаче заменяется функцией штрафа, которая обрабатывает ограничения. Для допустимых представителей населения функция штрафа аналогична функции соответствия.

Решение, возвращенное из ga отображается ниже. Обратите внимание, что участок, ближайший к поддержке, ограничен шириной $x_1$() и высотой $x_2$(), которая является целым значением, и это ограничение было соблюдено GA.

display(xbest);
xbest =

  Columns 1 through 7

    3.0000   60.0000    2.8326   56.6516    2.5725   51.4445    2.2126

  Columns 8 through 10

   44.2423    1.7512   34.9805

Также можно спросить ga для возврата оптимального объема балки.

fprintf('\nCost function returned by ga = %g\n', fbest);
Cost function returned by ga = 63196.6

Добавьте дискретные нецелочисленные ограничения переменной

Инженеры теперь получают информацию о том, что второй и третий шаги консоли могут иметь только ширины и высоты, которые выбираются из стандартного набора. В этом разделе мы покажем, как добавить это ограничение к задаче оптимизации. Обратите внимание, что с сложением этого ограничения эта задача идентична проблеме, решенной в [1].

Во-первых, мы заявляем дополнительные ограничения, которые будут добавлены к вышеописанной оптимизации

  • Ширина второй и третьей ступеней балки должна быть выбрана из следующего набора: - [2.4, 2.6, 2.8, 3.1] см

  • Высота второй и третьей ступеней балки должна быть выбрана из следующего набора: - [45, 50, 55, 60] см

Чтобы решить эту задачу, мы должны иметь возможность задать переменные, $x_3$$x_4$$x_5$и как$x_6$ дискретные переменные. Чтобы задать компонент как$x_j$ взятие дискретных значений из множества, $S = {v_1,\ldots,v_k}$оптимизируйте с$x_j$ целочисленной переменной, принимающей значения от 1 до, и $k$используйте в качестве$S(x_j)$ дискретного значения. Чтобы задать область значений (1 к), установите 1 $k$как нижнюю границу и как$k$ верхнюю границу.

Итак, сначала мы преобразуем границы дискретных переменных. Каждый набор имеет 4 представителей, и мы сопоставим дискретные переменные с целым числом в области значений [1, 4]. Итак, чтобы сопоставить эти переменные как целое число, мы устанавливаем нижнюю границу равную 1, а верхнюю границу равную 4 для каждой из переменных.

lb = [1 30 1 1 1 1 1 30 1 30];
ub = [5 65 4 4 4 4 5 65 5 65];

Преобразованные (целочисленные) версии,, $x_3$$x_4$$x_5$и $x_6$теперь будут переданы в функции соответствия и ограничения, когда ga вызывается решатель. Чтобы правильно оценить эти функции,, $x_3$$x_4$$x_5$и $x_6$нужно преобразовать в представитель данного дискретного набора в этих функциях. Чтобы увидеть, как это делается, исследуйте файлы MATLAB cantileverVolumeWithDisc.m, cantileverConstraintsWithDisc.m и cantileverMapVariables.m.

Теперь мы можем позвонить ga для решения задачи с дискретными переменными. В этом случае$x_1, ..., x_6$ являются целыми числами. Это означает, что мы передаем вектор индекса 1:6 на ga для определения целочисленных переменных.

rng(0, 'twister');
[xbestDisc, fbestDisc, exitflagDisc] = ga(@cantileverVolumeWithDisc, ...
    10, [], [], [], [], lb, ub, @cantileverConstraintsWithDisc, 1:6, opts);
Optimization terminated: maximum number of generations exceeded.

Анализ результатов

xbestDisc(3:6) возвращаются из ga как целые числа (т.е. в их преобразованном состоянии). Нам нужно отменить преобразование, чтобы получить значение в их инженерных модулях.

xbestDisc = cantileverMapVariables(xbestDisc);
display(xbestDisc);
xbestDisc =

  Columns 1 through 7

    3.0000   60.0000    3.1000   55.0000    2.8000   50.0000    2.3036

  Columns 8 through 10

   43.6153    1.7509   35.0071

Как и прежде, решение вернулось из ga поддерживает ограничение, которое$x_1$ и$x_2$ являются целыми числами. Мы также видим, что, $x_3$выбираются $x_5$из набора [2,4, 2,6, 2,8, 3,1] см и, $x_4$выбираются $x_6$из набора [45, 50, 55, 60] см.

Напомним, что мы добавили дополнительные ограничения на переменные x(3), x(4), x(5) и x(6). Как ожидалось, когда на этих переменных существуют дополнительные дискретные ограничения, оптимальное решение имеет более высокий минимальный объем. Обратите внимание, что решение, представленное в [1], имеет минимальный объем$64558 cm^3$ и что мы находим решение, которое примерно то же, что и в [1].

fprintf('\nCost function returned by ga = %g\n', fbestDisc);
Cost function returned by ga = 65226.5

Сводные данные

Этот пример иллюстрирует, как использовать решатель генетического алгоритма, ga, для решения ограниченной нелинейной задачи оптимизации, которая имеет целочисленные ограничения. Пример также показывает, как обрабатывать задачи, которые имеют дискретные переменные в формулировке задачи.

Ссылки

[1] Обследование дискретной переменной оптимизации для структурного проекта, P.B. Thanedar, G.N. Vanderplaats, J. Struct. Eng., 121 (3), 301-306 (1995)

Похожие темы

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