ИЗВЕСТИЯ
ТОМСКОГО ОРДЕНА ОКТЯБРЬСКОЙ РЕВОЛЮЦИИ И ОРДЕНА ТРУДОВОГО КРАСНОГО ЗНАМЕНИ ПОЛИТЕХНИЧЕСКОГО ИНСТИТУТА ИМ. С. М. КИРОВА
Том 277
1977
АЛГОРИТМ И ПРОГРАММА МЕТОДА СЛУЧАЙНОГО ПОИСКА С АДАПТИРУЮЩИМСЯ ШАГОМ
(Представлена научным семинаром лаборатории вычислительной техники и автоматизации НИИ ЯФ ЭА)
Задача поиска минимума функции F(X) формулируется следующим образом: найти вектор Х* = -^2--. хп ), доставляющий
min F(X) =F(X*), где D — область ограничений на переменные в виде xgD _
fj(X)^0, /=1,т. Случай поиска максимума F(X) сводится заменой R(X)=—F(X) к задаче поиска минимума R{X).
Метод случайного поиска. был впервые предложен и разработан Л. А. Растригиным [1]. Алгоритм метода можно записать в виде следующего рекуррентного выражения:
Здесь 5 — длина рабочего шага в пространстве переменных;
| — очередная реализация случайного вектора, равномерно распределенного по гиперкубу с единичным ребром с центром в начале координат.
Метод шагового случайного поиска минимума функции был запрограммирован по схеме с адаптирующимся шагом из [3]. Коротко суть предлагаемой в [3] „модификации состоит в следующем.
Пробные диаги из базовой точки осуществляются парами (делаются шаги длиной 5 и 5- (1+а), а>0. Если после М1 шагов не происходит уменьшения функции цели Р(Х), то шаг поиска уменьшается в К\ раз. Если при некоторой величине шага значение функции уменьшается, то эта величина шага запоминается в качестве номинального. Через М2 вычислений функции осуществляется «длинный шаг», в /С2 раз больше номинального. Если эта попытка удачна, то выбирается новое, большее значение номинального шага, если нет — шаг остается прежним.
• Подробнее с алгоритмом метода и результатами сравнения данного метода с другими можно ознакомиться в [2].
Н. Ф. ФИЛИПЕНКО
Алгоритм метода
S ;, если F(X*)<F(X*-1); . S-5-ДХ*, если F(Xk)^>F(Xk-1)-
Описание программы
Программа составлена для ЭВМ М-20, БЭСМ-4, М-220. Программа использует константы ИС-2; барабаны и ленты не использует. Рабочие ячейки 0001—0003; длина СП и рабочих полей равна шах \ 0256,0242 + + 2п \ . Таким образом, при /г>6 длина СП вместе с рабочими полями равна 0242 + 2п ячеек. При п^б длина СП равна 0256.
Программа СПАД настраивается по любому месту МОЗУ. Это значит, что предварительно СП может быть записана, начиная с любой ячейки а МОЗУ, например, по команде: С 010а, С+1,0000|, хранящейся в ячейке С. Настройка по месту (с ячейки а) производится после первого обращения к СП автоматически.
Обращение к программе осуществляется следующими двумя строками:
х+0 *+1
0 16 *+1 а 7610 14*2*3 п X* Р <з>
Здесь а — ячейка, с которой расположена в МОЗУ программа,
а+1—ячейка, в которую программист должен засылать вычисленное значение Р(Х).
Прежде чем вычислить значение Р(Х), необходимо проверить справедливость неравенства ¡¿(Х)~^0, ¡—\,т. Если хотя бы одно из неравенств не выполняется, то следует передать управление в ячейку (Т7—1) с засылкой любого не нулевого кода в ячейку (а + 2). (Следует помнить, что нельзя до обращения к программе засылать что-либо в ячейки а+1 и а+2). Р — ячейка входа в программу вычисления Р(Х); р—1 — ячейка выхода из программы вычисления Р(Х) (должна быть свободной). Таким образом, после вычисления значения Р(Х) и проверки ограничений программист должен заслать в ячейку (а+1) значение Р(Х) и передать управление в ячейку (Р~1); п—размерность вектора переменных X (задается в восьмеричном виде); Х°-г- ячейка, начиная с которой расположены компоненты вектора (начальная точка поиска). Причем вектор X должен удовлетворять условиям ¡}(Х)^0; /=1, т; <е>—ячейка, содержащая требуемую погрешность для проверки условия окончания процесса минимизации Р{Х). Компоненты Х° я а — суть нормализованные восьмеричные числа.
Предусмотрены следующие режимы использования признаков для различных критериев окончания процесса минимизации:
а) если Л2=1, то критерий г—Р(Хк)>0;
б) если яз=1, то критерий е—\\Хк — Хк~х ||>0;
в) если я 1 = Яг — Яз = 0, то критерий е—\Р(Хк)—Р(Хк~х )|>0;
г) если Я1=1, то критерий остановки задает программист (например, по числу вычислений.Р(Х)).
В случае г) ячейка <е> является ячейкой входа в блок проверки выполнения критерия в основной программе (ОП) программиста. Если критерий не выполнился и минимизация будет продолжена, программисту нужно передать управление в ячейку (е—1) (которая должна быть свободной). Если критерий выполнился, то при желании программист может передать управление в ячейку (а+0153) программы СПАД, где проводятся следующие заключительные действия. Пересылка вектора Хт{п (некоторого приближения к точке X*) на поле Х0, Р(Х т}п ) = = >а+1, восстановление ЯА основной программы и возврат в ячейку (и+2) ОП.
При выполнении критериев а)ч-в) заключительные действия выполняются автоматически.
Рабочие поля программы
а+0242ч-а+0241+п — компоненты вектора Хт1п (минимальная точка на данном этапе поиска); а+0242+п-^а+0241+2гг — компоненты вектора Хты (минимальная, полученная в результате одной итерации); Х°~Х°-\-п—1 —компоненты вектора текущей точки.
Параметры метода
Таблица!
№ Ячейки Обозначение Значение в программе
а+0214 (1+я) 1,5
а+0215 1,0
а+0216 0,5
а+0217 Мх 6,0
х+0220 ^ К-2 10,0
а+0221 м. 6,0
а+0222 10-5
Назначение параметров метода (кроме А5) описано в алгоритме метода. Все параметры задаются нормализованными восьмеричными числами.
В зависимости от значения А5 программа СПАД работает в двух режимах: если Д5>5, то шаг в методе делается с нормировкой по переменным (т. е. длина шага по каждой переменнбй зависит от абсолютного значения этой переменной,— чем больше значение переменной, тем больше по ней шаг), если Д5>5, то нормировка не производится. Таким образом, при больших Д5 нормировка не будет, а при Д5 = 0 нормировка шага будет делаться всегда.
,Для того чтобы изменить некоторый параметр, достаточно после ввода программы СПАД занести его в соответствующую ячейку в восьмеричном нормализованном виде (перед первым обращением к СПАД из ОП).
Возможные авосты, зацикливание и некоторые рекомендации
Программа случайного поиска может зациклить, если будет найден минимум Р(Х), а критерий окончания минимизации не выполнен (найден локальный минимум, либо неправильно задано е). Следует также отметить, что критерий окончания минимизации проверяется только | после уменьшения функции цели. Зацикливание может произойти при значении Д5 = 0, если какая-либо из переменных будет равна нулю, гак как в этом случае шаг по этой переменной будет равен нулю.
За зацикливанием можно следить по ячейке (а+0232), где находится шаг метода. При зацикливании шаг превращается в нуль.
Авост возможен в ячейке (а+0074) но команде 04, в случае, если все компоненты вектора X равны нулю.
За процессом минимизации можно следить по ячейке (а+0231), где находятся /7(Хт1П ) текущее; в ячейке (а+0230) находится значение Р(Х°); в ячейке (а-(-0233) находится число вычислений Р(Х).
. Как видно из обращения к программе СПАД, число переменных п не может быть больше 63. В принципе же размерность вектора X может быть больше 63. Для этого достаточно в ячейку (а+0007) ввести команду (00; </г>,—,2223), где Сп> — номер ячейки, в которой по второму адресу должно находиться число переменных в восьмеричном виде.
Программа случайного поиска
2000 4 72 0000 7610 7521 2056 0 02 2222 2235 0000
2001 2 72 0000 7777 0000 2057 0 36 0000 2061 2073
2002 7 16 0003 0224 0000 2060 0 16 2076 2065 2073
2003 4 72 0000 7610 2157 2061 0 72 0000 2223 0002
2004 4 55 0000 7740 2'223 2062 4 03 2241 0000 0001
2005 4 55 0000 7732 2224
2006 4 55 0000 7731 2225 2063 0 01 0001 0002 0002
2007 0 67 2223 0000 2223 2064 1 32 0002 2062 7777
2010 0 14 0114 2225 2225 2065 0 72 0000 2223 2236
2011 4 55 0000 7734 2226 2066 0 13 2212 2213 2212
2012 0 67 2226 0000 0003 2067 0 15 2212 2213 2213
2013 0 14 0114 2223 0001 2070 06 0101 2212 0001
2014 0 67 0001 0000 0002 2071 0* 02 7761 0001 0001
2015 0 13 2042 2225 2151 2072 0 05 2235 0001 0001
2016 4 55 0000 7712 2241 2073 0 00 0000 0000 0000
2017 0 76 2201 2025 2150
2020 4 55 0000 7711 0000 2074 4 04 2241 0002 0003
2021 0 76 2203 2025 2150 2075 0 05 0001 0003 0001
2022 4 55 0000 7714 0000 2076 0 00 0000 0000 0000
2077 1 32 0002 2066 7777
2023 0 36 2202 2025 2150 2100 0 72 0000 2224 0000
2024 0 00 2204 0000 2150 2101 3 16 2102 0000 7777
2025 4 16 0001 2026 2160 ' 2102 0 01 2233 7761 2233
2026 •о 53 0001 7750 2237 2103 0 00 0000 0000 0000
2027 0 01 2237 0000 2237 2104 0 15 0000 2002 0000
2030 0 13 2205 2226 2045 2105 0 76 0000 2116 2002
2031 0 13 2206 0002 2046 2106 0 02 2001 2231 0000
2032 0 13 2207 0003 2076 2107 0 76 0000 2116 0000
2034 0 00 2045 0000 2141 2110 0 72 0000 2223 2241
2035 0 13 2210 0001 2154 2111 0 00 0000 0000 0000
2033 0 13 2045 0002 2111 2112 1 32 0002 2111 7777
2036 0 13 2154 0003 2154 2113 0 00 2235 0000 2232
2037 0 13 2206 0001 2162 2114 0 00 0000 0000 2226
2040 0 13 2211 2223 2171 2115 0 .00 2001 0000 2231
2041 0 00 0000 0000 2226 2116 0 05 2232 2214 2235
2042 0 02 0001 0000 0000 2117 0 02 0000 2240 2240
2043 0 00 2215 0000 2232 2120 0 36 0000 2056 0000
2044 0 72 0000 2223 2233 2121 0 55 2241 7740 0000
2045 0 00 0000 0000 0000 2122 0 76 0000 2150 2241
2046 0 00 0000 0000 0000
2047 1 32 0002 2045 7777 2123 0 01 2226 7761 2226
2050 0 72 0000 2224 2234 2124 0 02 2226 2217 0000
2051 3 16 2052 0000 7777 2125 0 36 0000 2130 0000
2126 0 05 2232 2216 2232
2052 0 00 2001 0000 2230 2127 0 00 0000 0000 2226
2053 0 00 2001 0000 2231 2130 0 02 2227 2221 0000
2054 0 00 7761 0000 2240
2055 0 00 2232 0000 2235
2133 0 16 2134 2056 2103
2134 0 15 0000 2002 0000
2135 0 76 0000 2137 2002
2136 0 02 2001 2231 0000
2137 0 76 0000 2146 ' 2227
2140 0 72 0000 2223 0000
2141 0 00 0000 0000 0000
2142 1 32 0002 2141 7777
2143 0 01 2234 7761 2234
2144 0 00 2001 0000 2231
2145 0 00 2235 0000 2232
2146 0 01 2227 7761 2227
2147 0 56 0000 2055 2103
2150 0 00 0000 0000 0000
2151 0 00 0000 0000 0000
2152 0 76 0000 2161 0000
2153 0 72 0000 2223 0000
2154 0 00 0000 0000 0000
2155 1 32 0002 2154 7777
2156 0 00 2231 0000 2001
2157 0 00 0000 0000 0000
2160 0 00 0000 0000 0000
2161 0 72 0000 2223 0000
2162 0 00 0000 0000 0000
2163 1 32 0002 2162 7777
2164 0 56 0000 2130 0000
2165 0 02 2236 2231 0001
2166 0 03 0001 0000 0001
2167 0 56 2231 2151 2236
2170 0 72 0000 2223 0001
2171 0 00 0000 0000 0000
2172 0 03 0002 0000 0002
2173 0 01 0001 0002 0001
2174 1 32 0002 2171 777,7
2175 0 04 0001 2237 0001
2176 0 56 0000 2151 0000
2177 0 72 0000 2225 0000
2200 3 16 2161 0000 7777
2201 0 00 2231 0000 0001
2202 0 56 0000 2165 0000
2203 0 56 0000 2170 0000
2204 0 56 0000 2177 0000
2131 0 36 0000 2146 0000
2132 0 05 2232 2220 2235
2205 5 00 7777 0000 2241
2206 5 00 2241 0000 2241
2207 5 01 2241 0000 7777
2210 5 00 2241 0000 7777
2211 6 02 2241 2241 0002
2212 1 00 6220 7732 5042
2213 0 00 5006 2307 7730
2214 1 01 6000 0000 0000
2215 1 01 4000 0000 0000
2216 1 00 4000 0000 0000
2217 1 03 6000 0000 0000
2220 1 04 5000 0000 0000
2221 1 03 6000 0000 0000
2222 0 60 4000 0000 0000
2223 0 00 0243 0000 0000
2224 7 52 0000 0000 0224
2225 7 13 0234 0224 0234
2226 3 14 0064 0224 0225
2227 7 13 0234 0225 0234
2230 3 54 0114 0224 0225
2231 5 62 0225 7716 0226
2232 7 52 0211 0000 0150
2233 2 13 0000 0000 0001
2234 4 72 0001 0224 0232
2235 1 00 0001 0000 0227
2236 5 33 0227. 7716 0230
2237 3 36 0000 0243 0002
2240 6 33 0230 0223 0000
2241 2 76 0000 0243 0000
2242 2 41 0001 0226 0001
2243 3 14 0064 0226 0226
2244 3 14 0114 0227 0227
2245 2 76 0000 0236 0000
2246 7 72 0000 0232 0250
2247 3 53 0001 7777 7777
2250 0 00 0000 0000 0000
2251 6 33 0150 0232 0000
2252 3 76 0000 0231 0001
2253 7 16 0000 0254 0255
2254 0 72 0000 7521 0000
2255 0 00 0000 0000 0000
0 34 ,6514 3254 6230
ЛИТЕРАТУРА
1. Л. А. Р а с т р и г и II. Статистические методы поиска. М., «Наука», 1968.
2. В. В. Захаров, Н. М. Филипенко. Сравнение случайного поиска со схемой спуска на тестовых функциях. «Автоматика и вычислительная техника», 1972, № 1.
3. М. Schumer, К. Stei glitz. Adaptive step size random search. IEEE Trans. Automat. Control v. 13, № 3, 1968.