Шестаков В.С. Расчет на ЭВМ нефтегазового оборудования. Учебное пособие для МНГ-2015 (811778), страница 34
Текст из файла (страница 34)
5.9):1) устанавливаются границы изменения всех переменных[Хmin i, Xmax i];2) принимаются значения начальных шагов изменения переменных dXi в относительных единицах (можно задать 0.05 от задаваемогоинтервала изменения переменной);3) задаются начальной точкой поиска Хнi;4) вычисляется значение функции в начальной точкеy = f(Xн1,Xн2,...,Xнi);5) изменяется первая переменная на шаг x1 = x1 + dX1, а значения остальных остаются неизменными и вновь вычисляется значениефункции y=f(x1,x2,...,xi);6) сравнивается последнее значение функции с предыдущим,если происходит "улучшение" функции, то продолжают изменять переменную x1 в том же направлении.
Если сразу же происходит "ухудшение" функции, то изменяют x1 в другом направлении194x1 = x1 - dX1;7) изменение переменной осуществляется до тех пор, покафункция не начнет "ухудшаться", после чего выполняется возврат в"лучшую" найденную точку по переменной x1;8) из найденной точки x1 организуется аналогичным образомизменение переменной x2, а после нахождения лучшего значения повторой переменной изменение поочередно всех остальных;9) после изменения всех остальных переменных уменьшаютсязначения шагов изменения переменных (обычно в два раза) и повторяются пункты 7..9 до достижения заданной точности. Для практического применения при реализации в программе можно задавать определенное число циклов по уменьшению шага.
Так, при задании 6 циклов будет достигнута точность 0.16 % от заданного диапазона изменения переменной, что вполне достаточно для инженерных расчетов.х2Х2maxХ2нХ2minХ1minх1Х1нХ1maxРис. 5.9. Иллюстрация метода многомерной поисковойоптимизации покоординатного спускаДостоинствами метода можно считать существенное уменьшение требуемого числа вычислений по сравнению с полным перебором.К недостаткам метода следует отнести то, что в результате оптимизации может быть найден не глобальный, а локальныйоптимум.Рассмотренный алгоритм достаточно сложен для реализации его ввиде программы для ЭВМ, поэтому его не программируют каждый раззаново, а после первого программирования оформляют в виде подпро195граммы и используют для других задач, вызывая подпрограмму внужном месте.
Для отладки программы можно рекомендовать использовать функцию, оптимальное решение которой заранее известно, например, минимальное значение функции Y=10+(x1-5)2+(x2-3)2 будетравно 10 при значении x1=5 и x2=3.Пример программы для этой функции с выводом на лист «Покоорд» результатов будет иметь следующий вид:Option ExplicitDim A0, A1, A2, IvSub Пример_оптимизации() ‘Основная процедураDim Xmin(10) As Single, Xmax(10) As Single, dx(10) As SingleDim Xo(10) As Single, Xн(10) As Single, Yo As Single, NNCall Ввод (Xmin, Xmax, Xн)Iv = 17‘Задание начальной строки для выводаCall opt_pok_spuska(2, Xн, Xmin, Xmax, Xo, Yo, NN)Worksheets("Покоорд").Range("G12") = Xo(1) ‘Вывод оптимальногоWorksheets("Покоорд").Range("G13") = Xo(2) ‘решенияWorksheets("Покоорд").Range("G14") = YoWorksheets("Покоорд").Range("G15") = NNEnd SubSub Ввод (Xmin, Xmax, Xн)With Worksheets("Покоорд")A0 = .Range("G4"): A1 = .Range("G5"): A2 = .Range("G6")Xmin(1) = .Range("F8"): Xmin(2) = .Range("G8")Xmax(1) = .Range("F9"): Xmax(2) = .Range("G9")Xн(1) = .Range("F10"): Xн(2) = .Range("G10")End WithEnd SubFunction Fy(X() As Single)Dim YY = A0 + (X(1) - A1) ^ 2 + (X(2) - A2) ^ 2Worksheets("Покоорд").Cells(Iv, 1) = X(1)Worksheets("Покоорд").Cells(Iv, 2) = X(2)Worksheets("Покоорд").Cells(Iv, 3) = YIv = Iv + 1 : Fy = YEnd FunctionSub opt_pok_spuska(N As Integer, Xн() As Single, Xmin() As Single, Xmax() AsSingle, X() As Single, Yo As Single, NN)' Подпрограмма оптимизации методом покоординатного спуска' Входные данные: N - количество переменных оптимизации;' Хн - массив с начальными значениями переменных;' Хmin- массив с минимально допустимыми значениями переменных;196' Хmax- массив с максимально допустимыми значениями переменных;' Выходные данные:' Х - массив с оптимальными значениями переменных;' Yо - наилучшее значение функции после оптимизации;' Целевая функция должная быть оформлена подпрограммой функцией' Function FY(x), где Х - массив со значениями переменных.Dim i, j, k1 As Integer, dx(10) As SingleDim Y As Single, B As BooleanYo = 1E+31For i = 1 To Ndx(i) = (Xmax(i) - Xmin(i)) / 20 'Начальный шаг изменения переменнойNext iNN = 1'Переменная для выдачи числа вычислений функцииFor i = 1 To NX(i) = Xн(i)'Занесение в массив Х начальных значенийNext iY = Fy(X)'Вызов подпрограммы расчета функцииj=1'Переменная для цикла оптимизации (уменьшение шага)Do While j <= 7 'Начало цикла оптимизацииFor i = 1 To N'Цикл поочередного изменения всех переменныхB = Truek1 = 0'Переменная для возврата в "лучшую" точкуWhile B'Цикл изменение при увеличении переменнойk1 = k1 + 1If Y < Yo Then Yo = YX(i) = X(i) + dx(i) 'Изменение переменныхIf X(i) > Xmax(i) ThenX(i) = Xmax(i)B = False'Выход из цикла при достижении границыEnd IfNN = NN + 1Y = Fy(X)'Вызов подпрограммы расчета функцииIf Y > Yo ThenB = FalseX(i) = X(i) - dx(i) 'Возврат в лучшую точкуEnd IfWend' Завершение цикла while b doB = TrueWhile B And (k1 <= 1) 'Цикл при уменьшении переменнойIf Y < Yo Then Yo = YX(i) = X(i) - dx(i)'Изменение переменныхIf X(i) < Xmin(i) ThenX(i) = Xmin(i)197B = FalseEnd IfNN = NN + 1Y = Fy(X)If Y > Yo ThenX(i) = X(i) + dx(i)B = FalseEnd IfWenddx(i) = dx(i) / 2Next ij=j+1LoopEnd Sub'Вызов подпрограммы расчета функции'Для выхода из цикла по В' Завершение цикла while b do'Конец цикла For i = 1 To N' Конец цикла While j <= 7В программе применены глобальные переменные для передачи вподпрограмму функцию коэффициентов A0, A1, A2 и номера строкитаблицы Iv.
Эти величины нельзя передавать через аргументы подпрограмм, так как включение их в аргументы подпрограммы метода оптимизации лишит ее универсальности. Для каждой решаемой задачипридется вносить исправления.Метод случайного поискаРассмотрим метод, который лишен недостатка предыдущего обеспечивает поиск глобального оптимума. Из-за простоты алгоритмаон используется очень часто для проведения оптимизации. Метод основан на достижении заданной вероятности получения оптимальногорешения. Требуемое число вычислений для достижения задаваемойвероятности не зависит от числа переменных проектирования.Суть метода заключается в следующем. Интервал изменения каждой переменной делится на равное число ячеек (наиболее просто организовать алгоритм вычислений, если поделить интервал на числоячеек, кратное 10).
Затем, пользуясь случайными числами, осуществляется вычисление целевой функции требуемое число раз. Послесравнения полученных значений целевой функции определяется"лучшая" область, где находятся оптимальные значения переменных.Случайные числа могут быть взяты из таблиц случайных чисел илиполучены специальной программой - генератором случайных чисел.Рассмотрим вначале определение требуемого числа вычисленийфункции для одной переменной (рис. 5.10). Если разбить интервал ееизменения на K=10 ячеек (доля изменения переменной при этом будет198равна f=1/К=0.1) и вычислитьуодин раз функцию, то, как известно, вероятность того, чтомы получили оптимальноерешение, будет Po = 0.1, т. е.равна доле изменения переменной, Po =f.
А что будет, если выполним два вычисления?По логике вероятность должнахвозрасти, но нам известно изкурса "Теория вероятности", ХminХmaxчто с увеличением числа поРис. 5.10. Схема к определениюпыток вероятности перемнотребуемого числа вычислений дляжаются, поэтому возникаетодной переменнойабсурдная ситуация, что с увеличением числа расчетов снижается вероятность. Но все приходит внорму, если рассматривать вероятность не поиска оптимального решения, а противоположную ей вероятность пропуска оптимальногорешения, которая определится по известному выражениюPп = 1 - Po , или через долю, Pп = 1 – f .После М вычислений вероятность пропуска лучшего значенияPп =(1 - f ) М,а вероятность получения оптимального решения будетPo = 1 -Pп = 1 - (1 - f ) М .Для определения М по задаваемым значениям Po и f необходимопрологарифмировать выражениеМ = ln(1-Po) / ln(1-f).Требуемое число вычислений функции, согласно полученномувыражению, в данном методе не зависит от числа переменных (именно число вычислений функции, а не просто всех вычислений, включающее и вычисление значений самих переменных).После М вычислений будет достигнута заданная вероятность Родля каждой из независимых переменных, т.
е. для всего пространствапроектирования. Результаты вычислений для нескольких значений Рои f приведены в табл. 5.1, где указано, сколько ячеек надо выбратьслучайным образом, чтобы обеспечить заданную вероятность Po призаданной доле f изменения переменных. Из таблицы видно, что при199случайном выборе 44 ячеек при f = 0.1 вероятность достижения оптимального значения составит 99 %. Это очень неплохо, так как для достижения 100 % целевую функцию, как отмечалось выше, в случае 5переменных пришлось бы вычислять 4084101 раз.Таблица 5.1Требуемое число вычислений для достижения заданной вероятностиВероятность PoДоля измененияпеременных f0.8161610,10,010.922230Х2maxx2 iХ2minХ1minx1 iХ1maxРис. 5.11.