Помощь в написании студенческих работ
Антистрессовый сервис

Метод расщепления для задачи оптимизации

Курсовая Купить готовую Узнать стоимостьмоей работы

Бокса-Мюллераconstdouble epsilon = std: numeric_limits:min ();constdoubletwo_pi = 2.0*3.14 159 265 358 979 323 904;staticdouble z0, z1;staticbool generate;generate = !generate;if (!generate)return z1 * sigma + mu;double u1, u2;do{u1 = rand () * (1.0 / RAND_MAX);u2 = rand () * (1.0 / RAND_MAX);} while (u1 ≤ epsilon);z0 = sqrt (-2.0 * log (u1)) * cos (two_pi * u2);z1 = sqrt (-2.0 * log (u1)) * sin… Читать ещё >

Метод расщепления для задачи оптимизации (реферат, курсовая, диплом, контрольная)

Содержание

  • ВВЕДЕНИЕ
  • 1. МЕТОДЫ НЕЛИНЕЙНОЙ ОПТИМИЗАЦИИ
    • 1. 1. Общая постановка задачи оптимизации
    • 1. 2. Алгоритм расщепления в оптимизации
    • 1. 3. Программная реализация и обсуждение результатов
  • ЗАКЛЮЧЕНИЕ
  • СПИСОК ИСПОЛЬЗОВАННЫХ ИСТОЧНИКОВ
  • ПРИЛОЖЕНИЕ 2

пособие.

СПб.: Лань, 2008. — 160 с. Вентцель Е. С. Исследование операций: задачи, принципы, методология: учеб. пособие для втузов.

М.: Высш. шк., 2001. — 208 с. Волков И. К., Загоруйко Е.

А. Исследование операций: учебник для втузов. Серия: Математика в техническом ун-те — М.: Изд-во МГТУ. 2004. ;

440 с. Y ang X.-S., S. D eb S.

C uckoo search via L´evy flights / In: Proc. O f World Congress on Nature & Biologically Inspired Computing (NaBIC 2009), 2009, India, pp. 210−214.Botev ZI, Kroese DP. Effi.

cient Monte Carlo simulation via the generalized splitting method. S tat Comput 2012;22(1):1−16.QibinDuan, Dirk P. K roes. S plitting for optimization.

C omputers & operations research: and their applications to problems of world concern: an international journal. — O xford [u.a.]: Elsevier, ISSN 0305−0548, ZDB-ID 194 012−0. — Vol. 73.2016, p.

119−131ПРИЛОЖЕНИЕCommonFunction.h#pragmaonce#include<vector>usingnamespacestd;//ИнтерфейсфункцииclassCommonFunction{public://Операциявычисленияфункцииvirtualdoubleoperator ()(vector<double> &) = 0;CommonFunction () {};~CommonFunction () {};};MathObjects.h//Вспомогательный функционал#ifndef MATHOBJECTS_H#defineMATHOBJECTS_H#include<vector>#include<stdlib.h>usingnamespacestd;//Структура отрезкаstructInterval{//Границы интервалаdouble Min, Max;};//ОбластьпоискаstructRect{//Массив из границ интервалов образует паралеллипипедvector<Interval> obj;};//Начальное распределение точекvector<vector <double> > InitData (int, Rect &);//Генерация нормального распределенияdoubleRandNormal (double, double);vector<double> RandNormal (double, double, int);//Генерация целого числа из диапазонаintRandInt (int, int);//Случайная перестановкаvector<int> RandPerm (int);//Нормавектораdouble Norm (vector<double> &);#endifMathObjects.cpp#include" MathObjects. h" //Начальное распределение точекvector<vector <double> > InitData (intCount, Rect &ObjArea){vector<vector <double> > res;vector<double> Coord;//РазмерностьобластиintDimArea = ObjArea.obj.size ();for (inti = 0;i < Count;i++){Coord.clear ();//Цикл по отрезкам паралеллипипедаfor (int j = 0;j < DimArea;j++){double Min = ObjArea. obj[j]. M in;double Max = ObjArea. obj[j]. Max;//Случайнаявеличинаdoubleval = (double)rand () / RAND_MAX;//Генерациякоординатывинтервалеdoublecurr_val = Min + val*(Max — Min);//Добавление координаты в вектор точки начальных данныъCoord. push_back (curr_val);}//Добавление точки в начальное множествоres. push_back (Coord);}returnres;}//Генерация целого числа из диапазона [Min, Max]intRandInt (intMin, intMax){returnMin + rand () % (Max — Min + 1);}//Случайнаяперестановкаvector<int> RandPerm (intN){vector<int> parr;intrand_val;for (inti = 0; i<N; i++) {for (; ;) {//Генерируем случайное число от 0 до N-1rand_val = RandInt (0, N — 1);intdup_flag = 0; //Флагпроверки//Циклпроверкиfor (int j = 0; j<i; j++) {//Еслиестьсовпадаенияif (rand_val == parr[j]) { dup_flag = 1; break; }}//Если совпадений нетif (!dup_flag) { break; }}//Добавляем число в списокparr. push_back (rand_val);}returnparr;}//Генерация нормального распределенияdoubleRandNormal (doublemu, doublesigma){//Генерацияметодом.

Бокса-Мюллераconstdouble epsilon = std: numeric_limits<double>:min ();constdoubletwo_pi = 2.0*3.14 159 265 358 979 323 904;staticdouble z0, z1;staticbool generate;generate = !generate;if (!generate)return z1 * sigma + mu;double u1, u2;do{u1 = rand () * (1.0 / RAND_MAX);u2 = rand () * (1.0 / RAND_MAX);} while (u1 <= epsilon);z0 = sqrt (-2.0 * log (u1)) * cos (two_pi * u2);z1 = sqrt (-2.0 * log (u1)) * sin (two_pi * u2);return z0 * sigma + mu;}//Генерация вектора с нормальным распределениемvector<double> RandNormal (doublemu, doublesigma, intCount){vector<double> res;for (inti = 0;i < Count;i++)res.push_back (RandNormal (mu, sigma));return res;}//Вычислениенормывектораdouble Norm (vector<double> &X){double s = 0;for (inti = 0;i < X. size ();i++)s += X[i] * X[i]; returnsqrt (s);}SCOAlgorithm.h#pragmaonce#include<vector>#include" CommonFunction. h" #include" MathObjects. h" #include<algorithm>usingnamespacestd;//Информационный объектstructObjInfo{//Максимальное число попытокintMaxTry;//Максимальное число итерацийintMaxits;//Погрешностьdoubleeps;//Коэффициент редкостиdoublerho; //Размер популяцииdoublesize;};//Класс сравнения точек при сортировкеstructCompare{public:CommonFunction *Fun;Compare (CommonFunction *Fun){this->Fun = Fun;}//Операторсравненияbooloperator ()(constvector<double>& a, constvector<double>& b){vector<double> a1 = a;vector<double> b1 = b;bool res = Fun->operator ()(a1) < Fun->operator ()(b1);returnres;}};//Алгоритм оптимизации с расщеплениемclassSCOAlgorithm{public:void Solve ();SCOAlgorithm () {};~SCOAlgorithm (){Func = nullptr;Result.clear ();History.clear ();rect.obj.clear ();};//НастройкиObjInfoobj;//ЦелеваяфункцияCommonFunction *Func;//Область поискаRectrect;//Вектор результатаvector <double> Result;//Историяпоискаvector < vector <double> > History;boolCompareSort (constvector<double>&, constvector<double>&);};SCOAlgorithm.cpp#include" SCOAlgorithm. h" boolSCOAlgorithm: CompareSort (constvector<double>& a, constvector<double>& b){vector<double> a1 = a;vector<double> b1 = b;bool res = Func->operator ()(a1) < Func->operator ()(b1);return res;}voidSCOAlgorithm:Solve (){//ПодготовкапараметровintVecSize = rect.obj.size ();intMaxits = obj. Maxits;intMaxTry = obj. MaxTry;double rho = obj. rho;double res = 1;double eps = obj. eps;int N = obj. size;int t = 1;//Начальнаяпопуляцияvector<vector<double>> X_Init = InitData (N, rect);vector<vector<double>> X = X_Init;vector<vector<double>> X_new ;vector<vector<double>> E_;//Главныйциклwhile ((t<Maxits)){int N_ = X. size ();intN_e = floor (N_*rho);vector<vector<double>> X_ = X;//Сортировка по возрастанию функцииsort (X_.begin (), X_.end (), Compare (Func));//Отбор первых N_e в E[t + 1]E_.clear ();//Образуем множество E[t+1]for (inti = 0;i < N_e;i++)E_.push_back (X_[i]);//Добавляем элемент в историюHistory. push_back (E_[0]);X_new.clear ();//Цикл по множествуfor (inti = 0;i < N_e;i++){//Длина цепи Марковаint s_ = N / N_e;//Цикл по цепи Марковаfor (int j = 0;j < s_;j++){//Генерация вспомогательной переменной X[R]int R;for (;;){R = RandInt (0, N_e — 1);if (R ≠ i) break;}//Вычисляем sigmavector<double> sigma;for (int j = 0;j < VecSize;j++)sigma.push_back (abs (E_[i][j] - E_[R][j]));//Промежуточные векторыvector<double> Y, Y_;Y = E_[i]; //Случайная перестановкаvector<int> r_ = RandPerm (VecSize);//Формирование нового вектора//Цикл по перестановке — порядок обновления координатfor (int k = 0;k < r_.size ();k++){//Циклпочислупопытокfor (int try_ = 0;try_ < MaxTry;try_++){Y_ = Y;//Пересчет координаты семплером ГиббсаY_[r_[k]] = Y[r_[k]] + sigma[r_[k]] * RandNormal (1, 0);//Вычисляемисравниваемфункцииdouble z1 = Func->operator ()(Y_);double z = Func->operator ()(Y);//Если есть улучшениеif (z1 < z){//Перезаписываем координату на новуюY[r_[k]] = Y_[r_[k]]; break;}}}//Добавление в новое множество X[t+1]X_new.push_back (Y);} //Конец цикла по траекториямпо j} //Конец цикла по i по множеству//Вычислениепогрешностиvector<double> Res_;for (inti = 0;i < VecSize;i++)Res_.push_back (X_new[0][i] - X[0][i]);res = Norm (Res_);X.clear ();X =X_new;t++;} //Конец главного цикла//Точка оптимумаResult= E_[0]; }main.cpp#include<stdio.h>#include" SCOAlgorithm. h" #include" SquareFun. h" #include" RosenbrockFun. h" #include<iostream>#include<clocale>int main (){setlocale (LC_CTYPE, «rus»); // вызовфункциинастройкилокалиSCOAlgorithm *alg = newSCOAlgorithm ();ObjInfoobj;//Максимальное число итерацийobj. Maxits = 500;//Максимальное число попытокobj. MaxTry = 2;//Коэффициент редкости obj. rho = 0.5;//Размер начального множестваobj. size = 300;alg->obj=obj;//Видфункцииalg->Func = newSquareFun ();//alg->Func = new RosenbrockFun ();Rectrect_;//Формирование областиIntervalXLim; //Диапазон по оси OXXLim. Min = -2;XLim.Max = 2;IntervalYLim; //Диапазон по оси OYYLim. Min = -2;YLim.Max = 2;//Добавление интервалов-сторон паралеллепипедаrect_.obj.push_back (XLim);rect_.obj.push_back (YLim);alg->rect=rect_;alg->Solve ();cout<<" Точкаоптимума" <<endl;for (inti = 0;i < alg->Result.size ();i++)cout<<alg->Result[i]<<" «;cout<<endl;cout<<» Значениефункции="<<alg->Func->operator ()(alg->Result) <<endl;return 0;}.

Показать весь текст

Список литературы

  1. А.А. Введение в численные методы : учеб. пособие для вузов/ Серия: Классическая учебная по математике. — СПб.: Лань, 2009. — 288 с.
  2. . П., Марон И. А. Основы вычислительной математики: учеб. пособие/ Серия: Лучшие классические учебники. — СПб., М., Краснодар: Лань, 2006. — 672 с.
  3. Н. В., Марон И. А. Вычислительная математика в примерах и задачах: учеб. пособие. Серия: Классическая учебная по математике.- СПб.: Лань, 2009. — 368 с.
  4. . П., Марон И. А., Шувалова Э. 3. Численные методы анализа: приближение функций, дифференциальные и интегральные уравнения, учеб. пособие. Серия: Классическая учебная по математике. -СПб., М., Краснодар: Лань, 2008. — 400 с.
  5. Е.С. Исследование операций: задачи, принципы, методология: учеб. пособие для вузов. Серия: Высш. образование: учеб. пособие -М.: Дрофа, 2004. — 208 с. — Гриф (УМО)
  6. А. А. Введение в численные методы: учеб. пособие для вузов. Серия: Классический университетский учебник МГУ. -СПб.:Изд-во Лань, 2005. — 288 с.
  7. Г. И. Методы вычислительной математики: учеб. пособие. Серия: Классическая учебная по математике — СПб.: Лань, 2009. -608 с.
  8. М. А., Марков К. А. Основные методы вычислительной математики: учеб. пособие.- СПб.: Лань, 2008. — 160 с.
  9. Е. С. Исследование операций: задачи, принципы, методология: учеб. пособие для втузов.- М.: Высш. шк., 2001. — 208 с.
  10. И. К., Загоруйко Е. А. Исследование операций: учебник для втузов. Серия: Математика в техническом ун-те — М.: Изд-во МГТУ. 2004. — 440 с.
  11. Yang X.-S., S. Deb S. Cuckoo search via L´evy flights / In: Proc. Of World Congress on Nature & Biologically Inspired Computing (NaBIC 2009), 2009, India, pp. 210−214.
  12. Botev ZI, Kroese DP. Efficient Monte Carlo simulation via the generalized splitting method. Stat Comput 2012;22(1):1−16.
  13. Qibin Duan, Dirk P. Kroes. Splitting for optimization. Computers & operations research: and their applications to problems of world concern: an international journal. — Oxford [u.a.]: Elsevier, ISSN 0305−0548, ZDB-ID 194 012−0. — Vol. 73.2016, p. 119−131
Заполнить форму текущей работой
Купить готовую работу

ИЛИ