Технологии программирования
Шрифт:
Процедура регуляризации симплекса состоит в копировании во все поля значений аргументов симплекса значения вектора X0, и далее производятся изменения значений диагональных компонент векторов с номерами от 2 до n + 1 путем их увеличения на шаг регуляризации симплекса h.
В симплексе Q1, Q2, Q3…, Qn+1 — это рассчитанные значения минимизируемой функции при соответствующих по строке значениях аргументов минимизируемой функции.
Далее до выполнения условия окончания поиска осуществляются итерации (шаги)
Каждая итерация начинается с нахождения номеров l и k, соответственно лучшей и худшей по значению функции точек симплекса. Далее осуществляется расчет точки Xц — положения центра масс всех точек симплекса за исключением наихудшей точки 1. Это позднее улучшение алгоритма. Д. Химмельблау не исключал наихудшей точки.
где n — количество точек в симплексе; i — номер компоненты вектора X(i = 1, 2…, n); j — номер точки в симплексе.
Считаются нулевыми значения xkj слагаемых сумм, где k — номер наихудшей точки.
При работе метода на каждой из итерации может вычисляться одна из особых пробных точек: а — точка отражения, р — точка растяжения, у — точка сжатия. Точки вычисляются по формулам:
X? = Xц + ?(Xц — Xk), X? = Xц + ?(Xц — Xk), X? = Xц + ?(Xц — Xk).
Целесообразно эти похожие формулы реализовать одной функцией.
Значения коэффициентов ? = 1, ? = 0,5 и ? = 2 подобраны экспериментальным путем (в оригинале описания алгоритма эти значения можно выявить лишь из текста программ). Расчет точек ?, ?, ? целесообразно осуществлять одной процедурой с параметром в виде значений коэффициентов ?, ?, ?.
После расчета точки Xц вычисляется пробная точка ?. Далее выполняется одно из альтернативных действий.
Если Q? <= Q1, то выполняются действия достижения сильного успеха. Если Q1 <= Q? < Qk, то имеется слабый успех, а точка ? записывается на место k-точки. Если Q? >= Qk, то выполняются действия отсутствия успеха. Рассчитывается X? и Q?. Далее, если Q? <= Qk, то точка ? записывается на место k-точки, иначе, если точка ? хуже точки k, выполняется процедура редукции симплекса и процедура расчета значения функции в точках симплекса.
Действия достижения сильного успеха. Рассчитывается X? и Q?. Наилучшая из точек ? или ? записывается на место наихудшей k-точки симплекса.
Действия отсутствия успеха. Рассчитывается X? и Q?. Далее выполняется действие по изменению симплекса при отсутствии успеха.
Действие по изменению симплекса при отсутствии успеха представляет собой альтернативу: если Q? <= Qk, то точка ? записывается на место k-точки, иначе, если точка ? хуже точки k, выполняется процедура редукции симплекса.
При выполнении процедуры редукции симплекса все точки симплекса стягиваются к лучшей точке симплекса на половину своего прежнего удаления и далее выполняется процедура расчета значений целевой функции во всех точках
симплекса.5.8. КОДИРОВАНИЕ ТИПОВЫХ СТРУКТУР НА ЯЗЫКАХ ПРОГРАММИРОВАНИЯ
Обычно разработку алгоритмов программ совмещают с кодированием текста программы. Отдельное от программирования написание алгоритмов практически ничем не отличается от написания инструкций.
Кодирование программы должно осуществляться только с использованием стандартных структур! Запрещено использование меток, операторов безусловного перехода на метку (go to), операторов досрочного выхода из структуры break!
При кодировании на языке С оператор break может использоваться только при кодировании структуры switch.
При использовании другого процедурно-ориентированного языка программирования (не Pascal) необходимо предварительно закодировать на используемом языке программирования все описанные в этом подразделе стандартные структуры без изменения их логики!
Так, при программировании на языке С структура УНИВЕРСАЛЬНЫЙ ЦИКЛ — "ДО" будет включать операцию "!" (НЕ):
В приведенной выше структуре ненулевое значение переменной L соответствует окончанию выполнения цикла, а не его продолжению выполнения, как в операторе языка программирования! Использование "линией" операции (!) НЕ никак не удлинит программу. Современные компиляторы автоматически инвертируют логическое условие завершения цикла.
Структуре СЛЕДОВАНИЕ в программах могут соответствовать: выполнение всей программы; вызов процедуры.
Согласно стандарту проекта, АЛЬТЕРНАТИВА имеет четыре конструкции. Рассмотрим их запись на языке программирования Pascal.
Конструкция для одной альтернативы:
Конструкция для двух альтернатив:
Первый вариант конструкции для нескольких альтернатив (ВЫБОРА):
Второй вариант конструкции для нескольких альтернатив (ВЫБОРА):