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

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

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

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

Ступенчатая консольная проблема проектирования луча

Ступенчатый консольный луч поддерживается в одном конце, и загрузка применяется в свободном конце, как показано в фигуре ниже. Луч должен смочь поддержать данную загрузку на фиксированном расстоянии от поддержки. Разработчики луча могут отличаться ширина () и высота () каждого раздела. Мы примем, что каждый раздел консоли имеет ту же длину.

Объем луча

Объем луча, сумма объема отдельных разделов

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

Рассмотрите один консольный луч с центром координат в центре его сечения в свободном конце луча. Изгибающееся напряжение в точке в луче дано следующим уравнением

где изгибающий момент в, является расстоянием от загрузки конца и является моментом области инерции луча.

Теперь, в ступенчатом консольном луче, показанном в фигуре, максимальный момент каждого раздела луча, где максимальное расстояние от загрузки конца для каждого раздела луча. Поэтому максимальное напряжение для-th раздела луча, дают

где максимальное напряжение появляется в ребре луча. Моментом области инерции-th раздела луча дают

Замена этим в уравнение для дает

Изгибающееся напряжение в каждой части консоли не должно превышать максимальное допустимое напряжение. Следовательно, мы можем наконец утвердить пять изгибающихся ограничений напряжения (один для каждого шага консоли)

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

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

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

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

где момент приложенной силы в.

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

где момент области инерции-th части консоли. Оценка интеграла дает следующее выражение для.

Применяя теорему Кастиглиано, отклонением конца луча дают

Теперь, отклонение конца консоли, должны быть меньше, чем максимальное допустимое отклонение, которое дает нам следующее ограничение.

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

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

для

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

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

Позвольте, и

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

Согласно:

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

Разработайте Параметры для этой проблемы

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

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

  • Общая длина луча,

  • Отдельный раздел луча,

  • Максимальное отклонение конца луча,

Максимальное позволенное напряжение на каждом шаге луча,

Модуль молодежи каждого шага луча,

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

Мы теперь решаем проблему, описанную в состоянии Задача оптимизации.

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

Исследуйте файлы 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 от их значений по умолчанию, и уменьшаем опции FunctionTolerance и EliteCount. Эти настройки заставляют 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, чтобы решить проблему. В проблемном операторе и целочисленные переменные. Мы задаем это путем передачи индексного вектора [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, отображено ниже. Обратите внимание на то, что раздел, самый близкий, поддержка ограничивается иметь ширину () и высота (), который является целочисленным значением, и это ограничение соблюдалось 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] cm

  • Высота вторых и третьих шагов луча должна быть выбрана из следующего набора:-[45, 50, 55, 60] cm

Чтобы решить эту проблему, мы должны смочь задать переменные, и как дискретные переменные. Чтобы задать компонент как принимающий дискретные значения от набора, оптимизируйте с целочисленной переменной, принимающей значения от 1 до, и использование в качестве дискретного значения. Чтобы задать область значений (1 к), установите 1 как нижняя граница и как верхняя граница.

Так, сначала мы преобразовываем границы на дискретных переменных. Каждый набор имеет 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];

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

Теперь мы можем вызвать ga, чтобы решить проблему с дискретными переменными. В этом случае целые числа. Это означает, что мы передаем индексный вектор 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, соблюдает ограничение это и является целыми числами. Мы можем также видеть, что, выбраны из набора [2.4, 2.6, 2.8, 3.1] cm и, выбраны из набора [45, 50, 55, 60] cm.

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

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

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

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

Ссылки

[1] Обзор дискретной переменной оптимизации для проектирования конструкций, П.Б. Тэнедэра, Г.Н. Вэндерплээтса, J. Struct (). Инженер, 121 (3), 301-306 (1995)

Похожие темы