Шестаков В.С. Оптимизация параметров горных машин. Учебное пособие (811777), страница 10
Текст из файла (страница 10)
Существенным упрощением программы можно добиться включением диалогового режима в процесс оптимизации. Такойподход используется при создании систем управления для выводарабочего процесса, например работы бурового станка, на оптимальный режим. Переменными оптимизации будут осевое усилие нарабочем инструменте и скорость его вращения, а целевой функцией– скорость проходки. Один из возможных вариантов реализациидиалогового режима с помощью формы управления показан на рис.2.15.Рис. 2.15. Вид листа Excel при использовании диалога для оптимизацииПрограмма оптимизации по симплексу для двух переменных будет иметь вид:Option ExplicitConst N = 2Dim iv, A0, A1, A2Dim XH(20) As Single, Xmin(20) As Single, Xmax(20) As Single,Dim dX(20) As Single, Xo(20) As Single, Yo As SingleDim Nc, Nvc, Nvv, NvDim Xo1(100, 3), Xo2(100, 3), Yv(100, 3)51Sub Оптимизация_по_симплексу()‘Основная процедураiv = 14' Первая строка для вывода в таблицу результатовF_upr.B_stop = TrueВвод_симплекс‘Ввод исходных данныхCall Опт_симплекс(2, XH, Xmin, Xmax, dX, Xo, Yo)End SubSub Ввод_симплекс ()‘Ввод исходных данных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")XH(1) = .Range("F10"): XH(2) = .Range("G10")dX(1) = (Xmax(1) - Xmin(1)) * .Range("F11")dX(2) = (Xmax(2) - Xmin(2)) * .Range("G11")F_upr.dX1 = .Range("F11")F_upr.dX2 = .Range("G11")F_upr.N_симплекса = 1F_upr.N_вершины = 1End WithEnd SubSub Вывод_строки_симлекса(Nc, Nv, X1, X2, Y) ‘Вывод данных на листWorksheets("Симпл ").Cells(iv, 1) = NcWorksheets("Симпл").Cells(iv, 2) = NvWorksheets("Симпл").Cells(iv, 3) = X1Worksheets("Симпл").Cells(iv, 4) = X2Worksheets("Симпл").Cells(iv, 5) = Yiv = iv + 1Worksheets("Симпл").Cells(iv, 5).SelectEnd SubSub Upravlenie() ‘Процедура вызова формы и ввода с нее данныхF_upr.Show‘Вывод на экран формы управленияNvc = Val(F_upr.N_Симплекса) ‘Передача данных из элементовNvv = Val(F_upr.N_вершины) ‘формы в программуdX(1) = (Xmax(1) - Xmin(1)) * Val(F_upr.dX1)dX(2) = (Xmax(2) - Xmin(2)) * Val(F_upr.dX2)End SubFunction Fyp(X) ‘Подпрограмма, реализующая целевую функциюFyp = A0 + (X(1) - A1) ^ 2 + (X(2) - A2) ^ 2End FunctionSub Опт_симплекс (N, XH, Xmin, Xmax, dX, Xo, Yo)' Реализация алгоритма метода оптимизации по симплексу'Входные данные52'''''''''N - число переменных оптимизацииХН – массив с начальными значениями переменныхXmin - массив с минимально-допустимыми значениями переменных;Xmax - массив с максимально-допустимыми значениями переменных;dX – начальные шаг изменения переменных;Выходные данныеXo - массив с начальными значениями переменных;Yo –минимальное значение функцииЦелевую функцию оформить подпрограммой-функцией FY(N,X)Dim Xc1, Xc2, j1, N1, j, I, NminY, NmaxY, C2(3, 2)N1 = N + 1Nc = 1 'N симплекса' Задание коэффициентов для начального симплексаC2(1, 1) = 1:C2(1, 2) = 1 : C2(2, 1) = -1: C2(2, 2) = 0.46For j = 1 To N1' Начальный симплексXo1(Nc, j) = C2(j, 1) * dX(1) + XH(1) 'Xo2(Nc, j) = C2(j, 2) * dX(2) + XH(2) 'Xo(1) = Xo1(Nc, j)Xo(2) = Xo2(Nc, j)Yv(Nc, j) = Fyp(Xo)Call Вывод_строки_симлекса(Nc, j, Xo(1), Xo(2), Yv(Nc, j))Next jNmaxY =Maximum'Выбор вершины с «наихудшим» значением функцииF_upr.N_вершины = NmaxY 'Передача на форму «наихудшей» вершиныUpravlenie‘Вызов подпрограммы работы с формойNc = Nc + 1F_upr.N_Симплекса = NcWhile F_upr.B_stopXc1 = 0 ' Вычисление нового симплексаXc2 = 0For j = 1 To N1If j <> Nvv ThenXc1 = Xc1 + Xo1(Nvc, j) 'Сумма во всех вершинах без наихудшейXc2 = Xc2 + Xo2(Nvc, j)Xo1(Nc, j) = Xo1(Nvc, j) 'Координаты остальных вершинXo2(Nc, j) = Xo2(Nvc, j)Yv(Nc, j) = Yv(Nvc, j)Call Вывод_строки_симплекса(Nc,j,Xo1(Nc,j),Xo2(Nc,j),Yv(Nc, j))End IfNext jXo1(Nc, Nvv) = 2 * Xc1 / N - Xo1(Nvc, Nvv) 'Новая вершинаXo2(Nc, Nvv) = 2 * Xc2 / N - Xo2(Nvc, Nvv)53Xo(1) = Xo1(Nc, Nvv)Xo(2) = Xo2(Nc, Nvv)Nv = NvvYv(Nc, Nvv) = Fyp(Xo)‘Функция в новой вершинеCall Вывод_строки_симлекса (Nc, Nvv, Xo(1), Xo(2), Yv(Nc, Nvv))NmaxY = Maximum 'Выбор наихудшей вершиныF_upr.N_вершины = NmaxY 'Передача наихудшей вершины в формуUpravlenieNc = Nc + 1F_upr.N_Симплекса = NcIf Val(F_upr.dX1) <> Worksheets("Симпл").Range("F11") Then 'ПриNminY = Minimum‘Изменении шагаFor j = 1 To N1Xo1(Nc, j) = C2(j, 1) * dX(1) + Xo1(Nvc, NminY)Xo2(Nc, j) = C2(j, 2) * dX(2) + Xo2(Nvc, NminY)Xo(1) = Xo1(Nc, j)Xo(2) = Xo2(Nc, j)Yv(Nc, j) = Fyp(Xo)Call Вывод_строки_симлекса (Nc, j, Xo(1), Xo(2), Yv(Nc, j))Next jNmaxY = MaximumF_upr.N_вершины = NmaxYF_upr.N_Симплекса = NcWorksheets("Симпл").Range("F11") = F_upr.dX1Worksheets("Симпл").Range("G11") = F_upr.dX2UpravlenieEnd IfWendEnd SubFunction Minimum()‘Выявление наилучшей вершиныDim minY, NminYminY = 10 ^ 4If minY > Yv(Nvc, 1) ThenminY = Yv(Nvc, 1) : NminY = 1End IfIf minY > Yv(Nvc, 2) ThenminY = Yv(Nvc, 2) : NminY = 2End IfIf minY > Yv(Nvc, 3) ThenminY = Yv(Nvc, 3) : NminY = 3End If54Minimum = NminYEnd FunctionFunction Maximum()‘Выявление наихудшей вершиныDim maxY, NmaxYmaxY = -10 ^ 4If maxY < Yv(Nc, 1) ThenmaxY = Yv(Nc, 1)NmaxY = 1End IfIf maxY < Yv(Nc, 2) ThenmaxY = Yv(Nc, 2)NmaxY = 2Программа оптиEnd Ifмизации поиска поIf maxY < Yv(Nc, 3) ThenсимплексуmaxY = Yv(Nc, 3)NmaxY = 3End IfMaximum = NmaxYEnd FunctionPublic B_stop As Boolean‘Процедуры, связанные с формойPrivate Sub CommandButton1_Click() ‘Обработка кнопки «Выполнить»F_upr.Hide‘Удаление формы с экранаEnd SubPrivate Sub CommandButton2_Click() ‘Обработка кнопки «Завершение»B_stop = FalseF_upr.Hide‘Удаление формы с экранаEnd SubПоследовательность действий при работе с программой:а) на лист «Симпл» вводятся значения исходных данных, начального значения и доли пределов изменения переменных;б) выполняется щелчок по расположенной на листе кнопке, после чего на экран выведется изображенная на рис.
2.15 форма;в) при необходимости в полях ввода формы уточняется номеротражаемой вершины, затем щелчок по кнопке «Выполнить»;г) в случае, если симплекс начнет вращаться, необходимоуменьшить долю изменения переменных в полях на форме;д) для завершения расчетов необходимо щелкнуть по кнопке«Завершение оптимизации».Работа программы:55а) при щелчке по кнопке «Кнопка 1» запускается процедура«Оптимизация_Симплекс», а из нее последовательно вызываетсяпроцедура ввода данных с листа «Ввод_Симплекс» и метода оптимизации «Опт_симплекс»;б) в процедуре «Опт_симплекс» определяются координаты вершин симплекса и значения функции в этих вершинах, полученныезначения выводятся в таблицу на лист, определяется наихудшаявершина для отражения в подпрограмме «Maximum», и ее номервыводится на форму;г) пользователь может согласиться с предлагаемой для отражения вершиной или ввести свое значение;д) пункты б, в, г будут повторяться в программе после щелчка наформе по кнопке «Выполнить»;е) при корректировке доли изменения переменных у последнегосимплекса определяется наилучшая вершина в подпрограмме«Minimum», рассчитывается на этой вершине новый симплекс, т.
е.снова выполняются пункты б, в, г, д.Эта программа может послужить примером применения формVisual Basic с элементами управления для организации ввода данных и управления работой программы.2.2.6. Метод деформируемого многогранника Нелдера и МидаМетод поиска по симплексу склонен к зацикливанию и приводит к определенным трудностям в овражных ситуациях. Устранитьуказанные недостатки позволяет метод Нелдера и Мида, называемый методом деформированного многогранника.Начальный симплекс в этом метода задается так же, как и всимплекс-методе, но на последующих этапах конфигурация симплекса меняется.Алгоритм метода включает следующие этапы:1) устанавливаются координаты вершин начального симплексаи вычисляются в каждой из них значения целевой функции F(x);2) определяется вершина с наилучшим и наихудшим значениями целевой функции;3) вычисляются координаты центральной точки симплекса:1 N 1 iCA x k ,i x j ,k x i ,k ,N j 156гдеxck ,i- i-я координата центра многогранника;i - номер переменной проектирования;j - номер вершины многогранника;k - номер рассматриваемого симплекса;xAi,k- i-я координата вершины с наихудшим значением целевойфункции;4) отражение: вычисляются координаты отраженной вершины ифункции в этой вершине F(xo)Координаты отраженной вершины вычисляются по выражениюOCCAx k ,i x k , i a x k , i x k ,i ,где а - коэффициент отражения, как правило, а=1;5) если F(xOk,i) > F(xBk,i), то вычисления продолжаются с этапа8, где xBk,i - координаты вершин с наилучшим значением функции;6) растяжение: вычисление координат вершины Хр и значенияцелевой функции в ней F(xp).
Значения координат вершины прирастяжении определяются по выражениюx k ,i x k ,i x k ,i x k ,i PCOCгде γ- коэффициент растяжения, 2.8 < γ < 3.07) принимается PPB x k , i при F ( x k , i ) F ( x k , i )Ax k ,i x Ok , i при F ( x kP, i ) F ( x kB, i )и осуществляется переход к этапу 10.8) проверка условия F(xо) > F(xBк) для всех вершин за исключением наихудшей.